我有一个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;
}
答案 0 :(得分:6)
您是否尝试检测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;
}
}
答案 1 :(得分:1)
我希望你不只是在你的类中设置一个bool成员变量来响应按下Alt键。
如果您想在执行代码时知道Alt键是否关闭以响应其他事件(例如鼠标事件),请使用Control.ModifierKeys属性,因为它更可靠。它还意味着您没有冗余成员变量。
如果你实际上试图检测用户是否只按下了一个修改键,那么@ bluecoder的解决方案可能就是你想要的。
答案 2 :(得分:1)
如果要检测实键按下(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
}