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