WinForms ComboBox DropDown和Autocomplete窗口都会出现

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

 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"; 

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

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

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

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

在此处输入图像描述

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

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

ComboBox KeyDown事件中添加一行代码,问题就解决了!

 private void comboBox_NameAndID_KeyDown(object sender, KeyEventArgs e) { comboBox_NameAndID.DroppedDown = false; } 

资源

我是巴西的编码学生,我在项目中失去了很多时间来修复它。 在这里,我在几秒钟内看到它!

我的代码看起来像这样:

 private void populateCombos() { persist.ShowLst(dspMember, vlMember,varTable,lstBox,varWhere); persist.ShowLst(dspMember, vlMember,varTable,ddlist1,varWhere); persist.ShowLst(dspMember, vlMember,varTable, ddlist2,varWhere); ddList1.Text = null; ddList2.Text = null; lstBox.AutoCompleteMode = AutoCompleteMode.SuggestAppend; lstBox.AutoCompleteSource = AutoCompleteSource.ListItems; lstBox.Text = null; } 

添加到/ a按键事件。

  Dim box As ComboBox = sender box.DroppedDown = False 

那是我们的。 你的代码看起来很好,我多次使用自动完成function,但它没有同时显示DropDown和AutoComplete列表。

我的建议是

  • 在Display / Value成员之后设置DataSource。 我不记得为什么,但另一方造成了一些问题。

     comboBox1.ValueMember = "ID"; comboBox1.DisplayMember = "Display"; comboBox1.DataSource = t; 
  • 在代码末尾设置AutoCompleteSource(添加DataSouce后)

也许这有帮助。

一次只打开一个你可以使用comboBox1.Droppeddown = true打开常规,false只显示自动完成

您只需在集合中添加项目。

现在转到combobox的属性选项选择AutoCompleteSource = ListItems AutocompleteMode = suggest

注意:自动完成源根据您的要求有很多选项:)

WinForms ComboBox DropDown ……答案就是这个……
在comboBox1中写下面的代码输入事件..

 private void comboBox1_Enter(object sender, EventArgs e) { comboBox1.DroppedDown = true; } 

现在为comboBox1自动完成…
在页面加载事件中写这个AutoComplete() ..所以它工作…

 public void AutoComplete() { try { MySqlConnection conn = new MySqlConnection("server=localhost;database=databasename;user id=root;password=;charset=utf8;"); MySqlCommand cmd = new MySqlCommand("select distinct (columnName) from tablename", conn); DataSet ds = new DataSet(); MySqlDataAdapter da = new MySqlDataAdapter(cmd); da.Fill(ds, "tablename"); AutoCompleteStringCollection col = new AutoCompleteStringCollection(); int i = 0; for (i = 0; i <= ds.Tables[0].Rows.Count - 1; i++) { col.Add(ds.Tables[0].Rows[i]["columnName"].ToString()); } comboBox1.AutoCompleteSource = AutoCompleteSource.CustomSource; comboBox1.AutoCompleteCustomSource = col; comboBox1.AutoCompleteMode = AutoCompleteMode.Suggest; if (conn.State == ConnectionState.Open) { conn.Close(); } } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } 

从设计视图中选择ComboBox,并将“None”设置为AutoCompleteMode属性。

从设计视图中选择ComboBox,并将“Append”设置为AutoCompleteMode属性,这将建议不使用窗口的项目。