功能要求:>> 两者都要保持能正常输入文本, 但是不能用鼠标选择已经输入的文本内容...
>> 重写父类,拓展一个属性,用于控制它们在得到焦点时是否显示[输入光标]...
   (第二个要求在TextBox实现了,但是ComboBox用了同样的方法,却不起作用...)分不多,仅仅30点,但已经是我的全部家产了...希望大家能积极帮助...先谢了...

解决方案 »

  1.   

    在mousedown或者mouseup事件里加个this.textBox1.DeselectAll();就行了
      

  2.   

    1.过滤掉粘贴,按键消息
    2.参考代码
    namespace ComeBoxWithOutMenuDemo
    {
        public partial class ComeBoxEx : System.Windows.Forms.ComboBox
        {
            public ComeBoxEx()
            {
                InitializeComponent();            IntPtr ehWnd = FindWindowEx(base.Handle, IntPtr.Zero, "Edit", "");
                SubClassHwnd sub = new SubClassHwnd();
                sub.AssignHandle(ehWnd);
            }        [DllImport("user32.dll")]
            static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);        public class SubClassHwnd : System.Windows.Forms.NativeWindow
            {
                protected override void WndProc(ref Message m)
                {
                    if (m.Msg == 0x7b)
                        return;
                    base.WndProc(ref m);
                }
            }
        }
    }
      

  3.   

    TO: Red_angelX你那段代码好像是屏蔽右键菜单的...我试过来了,在ComboBox的默认模式下是可以屏蔽掉...可是修改成[this.comboBox.DropDownStyle = ComboBoxStyle.Simple;]后,屏蔽就会失效的...很感谢您提供的考参...可是我还想屏蔽掉得到焦点时闪烁的光标...
      

  4.   

    TO: dugupiaoyun感谢您提供的方法,这种方式对于TextBox是可以禁止选取文本...可是ComboBox没有DeselectAll方法...另外,能不能直接判断文本框的内容是否被选取???
      

  5.   

    Q: 另外,能不能直接判断文本框的内容是否被选取???
    --------------------------------------------
    A: 这个功能可以用SelectionLength属性来判断.
      

  6.   

    其它都搞定了...可是我不知道光标出现的消息值是什么???[DllImport("User32.dll")]
    public static extern bool HideCaret(IntPtr hWnd);在TextBox用:HideCaret(this.text1.Handle);成功把光标隐藏,可是用在ComboBox却不起作用.我也尝试过用低级封装,断承NativeWindow的方式处理,也是没有效果...
      

  7.   

    你可以在combox的mouseup事件里写this.comboBox1.Select(0, 0);
      

  8.   

    TO: 这个我都知道了...现在就只有ComboBox隐藏光标不能实现...我试了很多方法.都不行...
      

  9.   

    对于TextBox我希望禁止用Shift+[方向键]选择里面的文本.所以做了如下处理:private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Shift && (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down || e.KeyCode == Keys.Left || e.KeyCode == Keys.Right))
        {
            if (this.textBox1.SelectionLength > 0)
            {
                this.textBox1.SelectionLength = 0;
            }
        }
    }private void textBox1_KeyUp(object sender, KeyEventArgs e)
    {
        if (this.textBox1.SelectionLength > 0)
        {
            this.textBox1.SelectionLength = 0;
        }
    }按道理说是可以屏蔽文本选择功能...可是奇怪的是,每次用Shift+[方向键]按住不放时都总会选取到一个字符.很不完美...我想要的是不出现任何的[蓝底白字]...该怎么办呢???
      

  10.   

    把简单的问题搞复杂了!!!在mouseup里写和keyup里让textBox1.SelectionLength=0就全搞定
      

  11.   

    哈哈...(试了LZ的代码后) 看来好像只有我才听得懂LZ的意思...LS的,你在文本框多输入一点内容,用您所说的代码,运行后试试用[Shift+方向键]来选取文本...注意: 由后向前的方向选取,是按住不放的...你会发现总会选中一字符...