C# 在面板中创建按键关闭事件时出现问题

C# 在面板中创建按键关闭事件时出现问题,c#,winforms,event-handling,keydown,C#,Winforms,Event Handling,Keydown,我目前正在使用winform,它上面有一个面板。我需要能够使用面板上的上、下、左、右箭头,让事情发生 我尝试使用以下代码行添加事件: (MainPanel as Control).KeyDown += new KeyEventHandler(panelKeyPressEventHandler); 使用此键控代码: public void panelKeyPressEventHandler

我目前正在使用winform,它上面有一个面板。我需要能够使用面板上的上、下、左、右箭头,让事情发生

我尝试使用以下代码行添加事件:

            (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同意..)