我有带有选项卡和组合框控件的简单 win 表单应用程序。
- 组合框控件的样式为“简单”。
- 选项卡控件具有按键事件。
当我按下组合控件上的 Enter 键时,它会触发两个按键事件。如果您将组合样式更改为任何其他样式,则按键事件只会触发我所期望的一个。
有没有人知道为什么我会为单次输入按键获得两个按键事件?我在 Microsoft 网站上发现了类似的问题,但这与 .NET 1.0 有关。
我有带有选项卡和组合框控件的简单 win 表单应用程序。
当我按下组合控件上的 Enter 键时,它会触发两个按键事件。如果您将组合样式更改为任何其他样式,则按键事件只会触发我所期望的一个。
有没有人知道为什么我会为单次输入按键获得两个按键事件?我在 Microsoft 网站上发现了类似的问题,但这与 .NET 1.0 有关。
它可能与具有 Simple DropDown 样式的预定义行为的 Enter 键有关。
您可以在 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
}
}
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;
}
}