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事件不会引发并且buttonStartFocuse d.每当我禁用buttonStart时,它就会触发。

指出:

  • 我已经将Form.KeyPreview设置为true,仍然没有上升
  • 我已经将Form.AcceptButton设置为null,仍然没有上升
  • 我已经让buttonStart订阅了Form.KeyDown,仍然没有。

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();
}