C#中的combobox和自动完成

我在combobox中有自动完成选项的小问题。 一切都正常,除了我想要工作不同:)

当我开始输入combobox时,autusuggest以我喜欢的方式工作:

二合一

但是,当我第一次打开combobox,然后开始输入我得到类似的东西:

在此处输入图像描述

更有甚者,我不能从autosuggestcombobox中选择项目,只能从此列表中选择。

AutocompleteMode是SuggestAppend

我希望在第一张图片上有自动提示,在图片2的情况下,第一个combobox列表应该以某种方式关闭..

我有同样的问题并以这种方式解决了它:

private void comboBox_DropDown(object sender, EventArgs e) { ComboBox cbo = (ComboBox)sender; cbo.PreviewKeyDown += new PreviewKeyDownEventHandler(comboBox_PreviewKeyDown); } private void comboBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) { ComboBox cbo = (ComboBox)sender; cbo.PreviewKeyDown -= comboBox_PreviewKeyDown; if (cbo.DroppedDown) cbo.Focus(); } 

一旦用户点击DropDown按钮,就会将PreviewKeyDown事件附加到该ComboBox 。 当用户开始键入时,会触发新添加的事件。 在那个事件中,我们检查ComboBox是否是DroppedDown ,如果是,则关注ComboBox 。 在ComboBox DropDown消失,就是这样。

使用DropDown和DropDownClosed事件来禁用或更改自动完成模式怎么样?

我遇到了完全相同的问题。 我尝试使用DropDown和DropDownClosed事件将AutoCompleteMode属性设置为none并建议。 在这种情况下,使用鼠标选择项目后,SelectedIndexChanged事件不会被触发。 我在SelectedIndexChanged事件中使用SelectedValue属性,并且在触发DropDownClosed事件时此属性已更改。 在我的例子中,我只是从DropDownClosed事件调用SelectedIndexChanged方法来解决问题。

在ComboBox KeyDown上实现事件。 它看起来应该是这样的。

 void cmbExample_KeyDown(object sender, KeyEventArgs e) { if ((sender as ComboBox).DroppedDown) (sender as ComboBox).DroppedDown = false; } 

您是否尝试过AutoCompleteMode的其他可能值,即AppendNoneSuggest ? 我认为你要找的是Suggest而不是AppendSuggest

下面是一些可下载的示例代码,说明了不同的模式,如果需要的话。

我还发现默认的UI实现分散注意力,因为两个下拉列表对抗鼠标控制。

您希望在显示自动填充建议时隐藏下拉列表。 在显示自动填充建议之前,combobox会显示一条Windows消息。 我选择折叠droplist以响应此消息。 它需要一个小的替代combobox来实现这个目的:

 Public Class Combobox2 Inherits ComboBox Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) If m.Msg = 135 AndAlso DroppedDown Then 'WM_GETDLGCODE DroppedDown = False End If MyBase.WndProc(m) End Sub End Class 
 void cmbExample_KeyDown(object sender, KeyEventArgs e) { cmbExample.DroppedDown = false; }