[英]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.