簡體   English   中英

KeyDown事件不會引發

[英]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事件不會引發,而buttonStartFocuse 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM