KeyDown事件不会引发

时间:2011-10-14 19:30:16

标签: c# .net winforms

我有一个带有按钮的表单。我想捕获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事件不会引发,buttonStartFocuse d。每当我禁用buttonStart时,它都会触发。

注意:

  • 我已将Form.KeyPreview设为true,剧照未提升
  • 我已将Form.AcceptButton设为null,剧照未提升
  • 我已buttonStart订阅Form.KeyDown,但仍未订阅。

1 个答案:

答案 0 :(得分:2)

我希望这会对你有所帮助..


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