在Control.KeyUp事件上检测Alt键时出现问题

我有一个KeyDown和KeyUp事件的控件,如下所示。 我遇到的问题是KeyDown中的’x’为TRUE,而KeyUp中的’x’总是为FALSE。 我正在尝试检测Alt键(您可能已经猜到了)。

有没有我不知道的gottcha。 我的意思是,当我按下Alt时它会检测到它没问题但是在keyup上它是假的。

任何建议/想法

谢谢

private void MyControl_KeyDown(object sender, KeyEventArgs e) { bool x; x = ((int) (e.KeyData & Keys.Alt) != 0); x = (e.KeyData & Keys.Alt) == Keys.Alt; x = e.Alt; } private void MyControl_KeyUp(object sender, KeyEventArgs e) { bool x; x = ((int) (e.KeyData & Keys.Alt) != 0); x = (e.KeyData & Keys.Alt) == Keys.Alt; x = e.Alt; } 

您是否尝试检测Alt + [letter]事件? 是这样,试试这个:

  private void YourControl_KeyDown(object sender, KeyEventArgs e) { if((e.Alt) & (e.KeyCode == Keys.X)) { MessageBox.Show("Alt-X pressed"); } } 

对于只有Alt,试试这个:

  private void YourControl_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Menu) { //YourCode e.Handled = true; } } private void YourControl_KeyUp(object sender, KeyEventArgs e) { if (e.KeyData == Keys.Menu) { //YourCode e.Handled = true; } } 

我希望你不只是在你的类中设置一个bool成员变量来响应按下Alt键。

如果您想在执行代码时知道Alt键是否关闭以响应其他事件(例如鼠标事件),请使用Control.ModifierKeys属性,因为它更可靠。 它还意味着您没有冗余成员变量。

如果你实际上试图检测用户是否只按下了一个修改键,那么@ bluecoder的解决方案可能就是你想要的。

如果要检测实键按下(Alt或任何其他键),则可以使用此代码。 此代码适用于KeyUp,KeyDown和其他关键事件

 private void YourControl_KeyDown(object sender, KeyEventArgs e) { Key _key = e.Key != Key.System ? e.Key : e.SystemKey; // _key is your real pressed key }