防止ComboBox下拉列表及其AutoComplete下拉列表外观冲突

时间:2016-06-23 18:18:00

标签: c# winforms combobox

我有一个ComboBox DropDownStyleDropDown,允许用户输入,AutoCompleteModeSuggest。问题是,如果ComboBox当前处于打开状态并且用户开始键入其中,则会显示辅助下拉列表,但单击其中的项目实际上会从ComboBox的原始下拉列表中选择该项目。鼠标点击时。

我更希望如果ComboBox的下拉列表打开时用户无法输入,并且想知道是否有比这更优雅的解决方案:

  1. AutoCompleteMode开启时将None设置为ComboBox
  2. 可能会在DropDownStyle事件中将DropDownList更改为OnClick(尚未尝试,但理论合理)
  3. 在列表打开时操作(或限制)输入的文本
  4. 类似

1 个答案:

答案 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方法并将逻辑放在那里。这样您就可以将修复程序封装在控件类中,而不是处理表单中的事件,并且具有可重用的无错误控制和更干净的代码。