根据另一个论坛,这不是MS问题,因为他们说这是CombBox的“原生”行为。
如果ComboBox有DropDownStyle = DropDown并更改其大小,则文本会突出显示,如果表单有很多ComboBox,则表明控件已被选中。
为了避免这个问题,一个人建议覆盖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;
}
}
}
我不知道为什么只有一个客户才会发生这种情况。
答案 0 :(得分:0)
我想不出会引起这种情况的案例,但我有一个解决方法。我检查了反射器中的set_SelectionLength(Int32值):
this.Select(this.SelectionStart, value);
我不是没有为什么SelectionStart突然变成负数,但你可以削减中间人并预先形成这个变通方法代码:
this.Select(0, 0);