C# 在面板中创建按键关闭事件时出现问题
我目前正在使用winform,它上面有一个面板。我需要能够使用面板上的上、下、左、右箭头,让事情发生 我尝试使用以下代码行添加事件:C# 在面板中创建按键关闭事件时出现问题,c#,winforms,event-handling,keydown,C#,Winforms,Event Handling,Keydown,我目前正在使用winform,它上面有一个面板。我需要能够使用面板上的上、下、左、右箭头,让事情发生 我尝试使用以下代码行添加事件: (MainPanel as Control).KeyDown += new KeyEventHandler(panelKeyPressEventHandler); 使用此键控代码: public void panelKeyPressEventHandler
(MainPanel as Control).KeyDown +=
new KeyEventHandler(panelKeyPressEventHandler);
使用此键控代码:
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;
}
}
}
到目前为止,即使我保证在面板上设置了焦点,我也无法让它为任何事情输入此按键事件功能:(我可以整天按键盘,但什么也没发生
当面板有焦点时,有人对按下上、下、左、右箭头的最佳方式有什么建议吗
谢谢!面板控件无法获得焦点,也无法选择。焦点控件只能获得“键事件”。您可能需要在表单或
用户控件中重写ProcessCmdKey
您需要设置KeyPreview=true
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
switch(keydata)
{
case Keys.Up:
break;
...
}
return base.ProcessCmdKey(ref msg, keyData);
}
你希望发生什么?很可能你想在那里放置一些其他控件,Dock。填充它,然后对此作出反应。你可以用一个面板来做一些事情,但它更有用,因为它只是用来放置你想玩的东西。如果面板上有很多东西,可能会复制范围有点太广表单。我真的不知道目标是什么。这个巨大的包罗万象可能会适得其反。@DonBoitnott我不认为这会适得其反。你知道面板控件中不支持的关键事件吗?我说过这可能适得其反。使用ProcessCmdKey
作为第一个按键选项是草率的。相反,将面板
用于其预期用途,并放入一个设计用于捕获钥匙的控件中。@DonBoitnott同意..)