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



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

  • 组合框控件的样式为"Simple"。
  • Tab控件有键下事件。

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

有没有人有任何想法,为什么我得到两个键下事件为单一进入键按?我在微软网站上发现了类似的问题,但这与。net 1.0有关。

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

这可能与输入键具有简单下拉样式的预定义行为有关。

你可以在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
  }
}

KeyPress from Combobox只接受'char'键。对于您的目的,请使用KeyDown事件的组合框和e.h handled属性。

那么你的代码将工作,看起来像:

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;
            }
        }

最新更新