当用户选中下一个控件时,我遇到Winforms组合框丢失自动完成期间找到的值的问题.
这是一个代码示例(作为将弹出表单的Nunit测试):
[Test]
[STAThread]
public void Testing_AsDropDownList()
{
var comboBox = new ComboBox();
comboBox.DropDownStyle = ComboBoxStyle.DropDownList;
comboBox.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
comboBox.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
comboBox.Items.Add(new ComboPair("aaa", "ItemAAA"));
comboBox.Items.Add(new ComboPair("bbb1", "ItemBBB1"));
comboBox.Items.Add(new ComboPair("bbb2", "ItemBBB2"));
comboBox.Items.Add(new ComboPair("bbb3", "ItemBBB3"));
comboBox.Items.Add(new ComboPair("ccc", "ItemCCC"));
var textBox = new TextBox{ Multiline = true };
comboBox.Leave += (sender, args) => textBox.Text = "On Leave: " + comboBox.SelectedItem;
comboBox.LostFocus += (sender, args) => textBox.Text += " ... On LostFocus: " + comboBox.SelectedItem;
var frm = new Form();
frm.Width = 300;
frm.Height = 100;
comboBox.Dock = System.Windows.Forms.DockStyle.Top;
textBox.Dock = System.Windows.Forms.DockStyle.Bottom;
frm.Controls.Add(comboBox);
frm.Controls.Add(textBox);
Application.EnableVisualStyles();
Application.Run(frm);
}
要重现该错误,请执行以下步骤:
>运行测试
该表单将弹出以组合框为重点…
>现在输入’bbb3’以选择具有自动完成功能的相应项目.
现在,您将看到文本框已更新为“bbb3”作为您选择的项目.
>现在按TAB键
您现在将看到文本框具有焦点,并且组合选择已更改为“bbb1”.
另请注意,在文本框中,它会显示当触发事件被触发时所选值仍然是“bbb3”,但是当失去焦点事件触发时它是“bbb1”.
如果单击远离组合框使其在步骤3中失去焦点,则会出现相同的行为.
如果您在步骤3中执行任何其他操作,则不会出现此问题.即如果你:
>按’输入’
>按“向上”然后“向下”返回“bbb3”
>单击该项目
>等
有任何想法吗?
解决方法:
我从微软找到了这个链接
基本上这是一个已知的问题,微软表示他们无法修复.但是,该链接的变通方法部分有两种解决方法.