[英]Form won't fire KeyDown
我有一個帶有datagridview和按鈕的表單。 以后會有更多控件。
編輯:我確實有一個contextmenustrip和menustrip。
除非datagridview具有焦點,否則窗體的KeyDown事件不會觸發。 如果按鈕具有焦點,則不會觸發。 即使在加載窗體並使其具有焦點后,它仍不會觸發KeyDown事件。
如何確保無論焦點在窗體上的哪個位置,都會觸發該窗體的KeyDown事件?
我已經用谷歌搜索並查看了其他問題,例如Windows.Form不會觸發keyDown事件,但無法弄清楚。
表單加載事件:
private void Kasse_Load(object sender, EventArgs e)
{
this.BringToFront();
this.Focus();
this.KeyPreview = true;
}
表單KeyDown事件:
private void Kasse_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Up:
try
{
e.Handled = true;
dataGridView1.Rows[dataGridView1.SelectedRows[0].Index - 1].Selected = true;
}
catch (Exception)
{
}
break;
case Keys.Down:
try
{
e.Handled = true;
dataGridView1.Rows[dataGridView1.SelectedRows[0].Index + 1].Selected = true;
}
catch (Exception)
{
}
break;
}
}
在可以觸發窗體的KeyDown事件之前使用光標鍵。 您需要更早發現它們。 覆蓋ProcessCmdKey:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
if (keyData == Keys.Up) {
// etc...
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
如果要捕獲箭頭鍵,則這些是特殊的控制鍵。 您還必須重寫ProcessCmdKey
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Left) DoSomething();
else if (keyData == Keys.Right) DoSomethingElse();
else return base.ProcessCmdKey(ref msg, keyData);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.