我在组合框中的自动完成选项有小问题。一切都正常,除了我想要不同的工作:)
当我开始输入组合框时,autusuggest以我喜欢的方式工作:
但是当我第一次打开组合框,然后开始输入时,我会得到类似的东西:
我不能从autosuggest组合框中选择项目,只能从此列表中选择。
AutocompleteMode是SuggestAppend
我想在第一张图片上进行自动提示,在图片2等情况下,第一个组合框列表应该以某种方式关闭..
答案 0 :(得分:12)
我遇到了同样的问题并以这种方式解决了这个问题:
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
消失,就是这样。
答案 1 :(得分:5)
如何使用DropDown和DropDownClosed事件来停用或更改自动完成模式?
答案 2 :(得分:3)
我遇到了完全相同的问题。 我尝试使用DropDown和DropDownClosed事件将AutoCompleteMode属性设置为none并建议。 在这种情况下,使用鼠标选择项目后,SelectedIndexChanged事件不会被触发。 我在SelectedIndexChanged事件中使用SelectedValue属性,并且在触发DropDownClosed事件时此属性已更改。 在我的例子中,我只是从DropDownClosed事件调用SelectedIndexChanged方法来解决问题。
答案 3 :(得分:3)
在ComboBox KeyDown上实现事件。它看起来应该是这样的。
void cmbExample_KeyDown(object sender, KeyEventArgs e)
{
if ((sender as ComboBox).DroppedDown)
(sender as ComboBox).DroppedDown = false;
}
答案 4 :(得分:2)
您是否尝试了AutoCompleteMode
Append
,None
和Suggest
的其他可能值?我认为您要找的是Suggest
而不是AppendSuggest
。
以下是一些downloadable sample code,说明了不同的模式,如果需要的话。
答案 5 :(得分:2)
我还发现默认的UI实现会分散注意力,因为两个下拉列表都在争夺鼠标控制权。
您希望在显示自动填充建议时隐藏下拉列表。在显示自动填充建议之前,组合框会显示一条Windows消息。我选择折叠下拉列表以响应此消息。它需要对组合框进行小幅覆盖以实现此目的:
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
答案 6 :(得分:0)
void cmbExample_KeyDown(object sender, KeyEventArgs e)
{
cmbExample.DroppedDown = false;
}