KeyDown事件没有引发
本文关键字:事件 KeyDown | 更新日期: 2023-09-27 18:11:13
我有一个带有按钮的表单。我想要捕捉形式。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
,仍然没有上升 - 我已经将
Form.AcceptButton
设置为null
,仍然没有上升 - 我已经让
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);
}
}
}
之后,你可以在每个不同的按钮或表单中处理keyDown事件事件:
在按钮的KeyDown方法中尝试设置这些属性:
private void myButton1_KeyDown(object sender, KeyEventArgs e)
{
e.Handled = true;
//DoSomething();
}
——OR——
处理下列形式的常见行为:(do not set e。(按钮)
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
//DoSomething();
}