我目前正在研究winform,其上有一个面板。我需要能够使用面板上的向上,向下,向左和向右箭头来实现某些目标。
我尝试使用以下代码行添加事件:
(MainPanel as Control).KeyDown +=
new KeyEventHandler(panelKeyPressEventHandler);
使用此KeyDown代码:
public void panelKeyPressEventHandler(object sender, System.Windows.Forms.KeyEventArgs e)
{
MessageBox.Show("Here I am!");
switch (e.KeyCode)
{
case Keys.L:
{
break;
}
case Keys.R:
{
break;
}
case Keys.Up:
{
break;
}
case Keys.Down:
{
break;
}
case Keys.Right:
{
break;
}
case Keys.Left:
{
break;
}
}
}
到目前为止,即使我保证在面板上设置焦点,我也无法让它为任何事情输入此KeyDown事件函数。 :(我可以整天打钥匙,没有任何反应。
当面板有焦点时,有没有人对按下向上,向下,向左和向右箭头的最佳方法有任何建议?
谢谢!
答案 0 :(得分:3)
面板控件无法获得焦点,也无法选择。专注的控件只能获得“关键事件”。您可能需要覆盖表单中的ProcessCmdKey
或UserControl
。
您需要设置KeyPreview = true
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
switch(keydata)
{
case Keys.Up:
break;
...
}
return base.ProcessCmdKey(ref msg, keyData);
}