在Panel中创建KeyDown事件时遇到问题

时间:2013-11-19 18:36:04

标签: c# winforms event-handling keydown

我目前正在研究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事件函数。 :(我可以整天打钥匙,没有任何反应。

当面板有焦点时,有没有人对按下向上,向下,向左和向右箭头的最佳方法有任何建议?

谢谢!

1 个答案:

答案 0 :(得分:3)

面板控件无法获得焦点,也无法选择。专注的控件只能获得“关键事件”。您可能需要覆盖表单中的ProcessCmdKeyUserControl

您需要设置KeyPreview = true

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    switch(keydata)
    {
        case Keys.Up:
             break;
        ...
    }
    return base.ProcessCmdKey(ref msg, keyData);
}