Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改ComboBox的本机行为-更改ComboBox的大小时,ComboBox将高亮显示_C# - Fatal编程技术网

C# 更改ComboBox的本机行为-更改ComboBox的大小时,ComboBox将高亮显示

C# 更改ComboBox的本机行为-更改ComboBox的大小时,ComboBox将高亮显示,c#,C#,另一个论坛称,这不是微软的问题,因为他们说这是CombBox的固有行为 如果组合框具有DropDownStyle=DropDown并更改其大小,则文本将高亮显示,如果窗体具有多个组合框,则控件似乎已被选中 为了避免这个问题,一个人建议覆盖WndProc。 在只有一个客户端报告未处理的错误之前,一切都正常工作 System.ArgumentOutOfRangeException: InvalidArgument=Value of '-2136611475' is not valid for 'st

另一个论坛称,这不是微软的问题,因为他们说这是CombBox的固有行为

如果组合框具有DropDownStyle=DropDown并更改其大小,则文本将高亮显示,如果窗体具有多个组合框,则控件似乎已被选中

为了避免这个问题,一个人建议覆盖WndProc。 在只有一个客户端报告未处理的错误之前,一切都正常工作

System.ArgumentOutOfRangeException: InvalidArgument=Value of '-2136611475' is not valid for 'start'.
Parameter name: start
   at System.Windows.Forms.ComboBox.Select(Int32 start, Int32 length)
   at System.Windows.Forms.ComboBox.set_SelectionLength(Int32 value)...............


class ComboBoxEx : ComboBox
{
    const int WM_SIZE = 5;

    protected override void WndProc(ref Message m)
    {
        switch(m.Msg)
        {
            case WM_SIZE:
                string text = Text;
                base.WndProc(ref m);

                //The exception strangely is trown here
                SelectionLength = 0;

                Text = text;
                break;

            default:
                base.WndProc(ref m);
                break;
        }
    }
}

我不知道为什么只有一个客户会发生这种情况。

我想不出会导致这种情况的案例,但我有一个解决办法。我检查了反射器中的set_SelectionLengthInt32值:

this.Select(this.SelectionStart, value);
我不知道为什么SelectionStart突然变成一个负数,但您可以减少中间商并执行此解决方案代码:

this.Select(0, 0);

我不知道答案,但您可能应该为此添加一个windows窗体标记。这可能有助于让更多的人了解这些问题。谢谢HuBeza,这个解决方法非常有效,很简单,也是个好主意。