Simple样式组合框的KeyDown事件被引发两次

时间:2013-04-22 14:01:31

标签: winforms combobox keydown

我有一个简单的win表单应用程序,带有选项卡和组合框控件。

  • 组合框控件的风格为“简单”。
  • 标签控件具有按键事件。

当我在组合控件上按Enter键时,它会触发两个按键事件。如果您将组合样式更改为任何其他样式,则按键事件仅触发一个我期望的事物。

有没有人知道我为什么会收到单键输入键的两个按键事件? 我在Microsoft网站上发现了类似的问题,但这与.NET 1.0有关。

http://support.microsoft.com/kb/814970

2 个答案:

答案 0 :(得分:0)

它可能与Enter键有关,它具有Simple DropDown样式的预定义行为。

您可以在KeyDown事件中尝试解决此问题:

void comboBox1_KeyDown(object sender, KeyEventArgs e) {
  e.SuppressKeyPress = true;
  // do stuff
}

您可以猜到,KeyPress事件现在不会启动。

如果您仍需要处理KeyPress事件中的事情,可以尝试这种解决方法:

void comboBox1_KeyPress(object sender, KeyPressEventArgs e) {
  if (e.KeyChar == (char)Keys.Enter) {
    e.Handled = true;
  } else {
    // do stuff
  }
}

答案 1 :(得分:0)

Combobox的KeyPress只接受'char'键。为了您的目的,请使用组合框和e.Handled属性的KeyDown事件。

然后您的代码将起作用,如下所示:

private void comboBox2_KeyDown(object sender, KeyEventArgs e)
        {

            if (e.KeyCode == Keys.Enter)
            {
                comboBox2.KeyDown += new KeyEventHandler(comboBox2_SelectionChangeCommitted);
            }

            if (e.KeyCode != Keys.Enter)
            {

                e.Handled = false;

            }
        }