WinForms ComboBox DropDown和Autocomplete窗口都会出现

Cly*_*yde 30 c# combobox autocomplete winforms

我在ComboBox这个代码的winforms应用程序上有一个:

comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;

DataTable t = new DataTable();
t.Columns.Add("ID", typeof(int));
t.Columns.Add("Display", typeof(string));

for (int i = 1; i < 2000; i++)
{
    t.Rows.Add(i, i.ToString("N0"));
}

comboBox1.DataSource = t;
comboBox1.ValueMember = "ID";
comboBox1.DisplayMember = "Display";
Run Code Online (Sandbox Code Playgroud)

然后,当窗口打开时,我按照以下步骤操作:

  1. 单击ComboBox下拉按钮 - 显示项目列表并选择文本ComboBox
  2. 输入'5','1'...即我想使用自动完成来搜索515,516等.
  3. 您将看到自动完成窗口现在显示在下拉列表的顶部.但是,如果我将鼠标移过,它就是自动完成窗口后面的模糊下拉窗口,它接收鼠标事件,包括点击.所以我想我点击一个自动完成的项目,但实际上点击了一些我看不到的完全随机的东西.

这是一个错误ComboBox吗?如果重要的话,我正在使用Windows 7.我是以ComboBox某种方式配置错误的?

另请注意,使用KEYBOARD会使用自动完成下拉菜单.所以上/下箭头键正在使用前窗,但鼠标正在使用后窗.

在此输入图像描述

Joe*_*tty 24

为您的ComboBox KeyDown活动添加一行代码,问题就解决了!

private void comboBox_NameAndID_KeyDown(object sender, KeyEventArgs e)
{
    comboBox_NameAndID.DroppedDown = false;
}
Run Code Online (Sandbox Code Playgroud)

资源

  • 您在已接受答案下的评论引起了我的注意。感谢那。它真的解决了。 (3认同)

Han*_*ant 20

通过设置PropertyGrid中的属性,没有问题为此获得repro.在Win7和Windows XP中都采用这种方式.

这是本反馈文章中记录的破坏行为.如上所述,微软没有考虑修复.一种可能的解决方法是在DropDown事件处理程序中禁用自动完成,并在DropDownClosed事件处理程序中重新启用它.

  • 我讨厌看到人们来寻找答案,看看这个问题的接受答案 - 这并没有真正解决他们的问题 - 然后离开而没有答案.在你成为这些人之一之前,用我的名字来看看这个问题的答案......它确实能够轻松而完整地解决这个问题. (9认同)
  • 查看@JoeGayetty的回答. (3认同)