我有一个包含大量控件的窗体。只要点击任何键,如箭头键,我想举起一个事件。问题不在代码中,问题是控件有一个tab索引,所以当我点击箭头键时,光标只会移动到另一个控件,这就是我不想要的。
答案 0 :(得分:2)
将每个控件KeyDown事件附加到同一个处理程序:
Control.KeyDown+=new KeyEventHandler(Control_KeyDown);
private void Control_KeyDown(object sender, KeyEventArgs e)
{
//trap here and handle
if(e.KeyCode == Keys.Left || e.KeyCode == Keys.Right || e.KeyCode == Keys.Up || e.KeyCode == Keys.Down)
e.Handled = true;
}
答案 1 :(得分:2)
您必须确保当前表单上没有任何有效控件。将此代码放在Form.cs
中this.ActiveControl = null;
答案 2 :(得分:2)
经过一些测试后我发现了
protected override bool ProcessDialogKey(Keys keyData)
{
return false;
}
这将导致箭头键(和选项卡)作为普通的KeyDown事件传递。这也会导致正常的对话键功能(例如Tab键和箭头键)停止,但仍然会获得KeyDown事件