我有一个ComboBox
DropDownStyle
为DropDown
,允许用户输入,AutoCompleteMode
为Suggest
。问题是,如果ComboBox
当前处于打开状态并且用户开始键入其中,则会显示辅助下拉列表,但单击其中的项目实际上会从ComboBox的原始下拉列表中选择该项目。鼠标点击时。
我更希望如果ComboBox的下拉列表打开时用户无法输入,并且想知道是否有比这更优雅的解决方案:
AutoCompleteMode
开启时将None
设置为ComboBox
DropDownStyle
事件中将DropDownList
更改为OnClick
(尚未尝试,但理论合理)答案 0 :(得分:3)
作为一个选项,您可以处理ComboBox
的{{3}}事件并关闭下拉列表。它使自动完成菜单保持打开状态,但关闭下拉列表:
private void comboBox1_KeyPress(object sender, KeyPressEventArgs e)
{
this.comboBox1.DroppedDown = false;
}
作为另一种选择,您可以处理ComboBox
的{{3}}和KeyPress
事件,并在DropDown
中停用自动填充功能,并在DropDownClosed
事件中再次启用它:
private void comboBox1_DropDown(object sender, EventArgs e)
{
this.comboBox1.AutoCompleteMode = AutoCompleteMode.None;
}
private void comboBox1_DropDownClosed(object sender, EventArgs e)
{
this.comboBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
}
您可以创建一个派生自ComboBox
的新类,并覆盖相应的OnXXXX
方法并将逻辑放在那里。这样您就可以将修复程序封装在控件类中,而不是处理表单中的事件,并且具有可重用的无错误控制和更干净的代码。