[英]KeyDown event doesn't raise
我有一个带有按钮的表单。我想捕获Form.KeyDown事件。
private void buttonStart_Click(object sender, EventArgs e)
{
if (!this.gameRunning)
{
this.buttonStrat.Text = "Pause";
this.timer1.Enabled = true;
}
else
{
this.buttonStart.Text = "Continue";
this.timer1.Enabled = false;
}
this.gameRunning = !this.gameRunning;
}
但是,我在没有支持PAUSE的情况下禁用了buttonStart
,它运行良好。 由于我添加了PAUSE优势,因此Form.KeyDown
事件不会引发,而buttonStart
是Focuse
d。 每当我禁用buttonStart
,它都会触发。
笔记:
Form.KeyPreview
设置为true
,stills不会引发 Form.AcceptButton
设置为null
,stills不会引发 buttonStart
订阅了Form.KeyDown
,但仍然没有订阅。 我希望这会对你有所帮助..
覆盖IsInputKey行为
您必须覆盖IsInputKey行为,以通知您希望将右箭头键视为InputKey而不是特殊行为键。 为此,您必须覆盖每个控件的方法。 我建议你创建你赢得的按钮,让我们说MyButton
下面的类创建一个自定义Button,它覆盖IsInputKey方法,因此右箭头键不会被视为特殊键。 从那里你可以轻松地为其他箭头键或其他任何东西。
public partial class MyButton : Button
{
protected override bool IsInputKey(Keys keyData)
{
if (keyData == Keys.Right)
{
return true;
}
else
{
return base.IsInputKey(keyData);
}
}
}
之后,您可以在每个不同的Button或表单本身中处理您的keyDown事件事件:
在按钮的KeyDown方法中尝试设置这些属性:
private void myButton1_KeyDown(object sender, KeyEventArgs e)
{
e.Handled = true;
//DoSomething();
}
- 要么 -
处理表单中的常见行为:(不要设置e.Handled = true;在按钮中)
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
//DoSomething();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.