首页 文章

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

提问于
浏览
2

我目前正在研究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 回答

  • 3

    面板控制无法获得焦点,也无法选择 . 重点控制只能得到"key events" . 您可能需要在表单中覆盖 ProcessCmdKeyUserControl .

    你需要设置 KeyPreview = true

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

相关问题