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";
然后,当窗口打开时,我按照以下步骤操作:
- 单击
ComboBox
下拉按钮 – 显示项目列表并选择ComboBox
的文本 - 输入’5’,’1’…即我想使用自动完成来搜索515,516等。
- 您将看到自动完成窗口现在显示在下拉列表的顶部。 但是,如果我将鼠标移过,它就是自动完成窗口后面的模糊下拉窗口,它接收鼠标事件,包括点击。 所以我想我点击一个自动完成的项目,但实际上点击一些我看不到的完全随机的东西。
这是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属性,这将建议不使用窗口的项目。