我在Form上添加了一个panel,进行画图处理。
需要响应键盘事件实现 全选(Ctrl+A)复制(Ctrl+V)等
panel没有键盘事件?怎么做呢?
我在百度上查了下,可以设置Form的keyPreview为true.然后程序中利用From_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)来实现。
我也试验了一下,但是只能在程序运行起来以后,没取任何焦点的情况下,响应一次,然后无论怎么按键盘上的键都不在响应了。    private void FormDrawMain_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            if (e.KeyCode == Keys.A && e.Control)
            {
                MessageBox.Show("OK");
            }
        }代码如上。。

解决方案 »

  1.   

    可以设置Form的快捷菜单实现.
      

  2.   

    目测是MessageBox.Show("OK");导致焦点不在Panel上了。
      

  3.   

    你用鼠标点一下panel之后看看是否有响应,如果有,说明是焦点的问题,
      

  4.   

    我现在通过
    FormDrawMain_KeyDown
    事件已经实现了响应键盘事件。
    但是我的Form上还有个Tabcontrol控件,当我响应
                  if (e.KeyCode == Keys.Left && e.Control)
                {
                    MessageBox.Show("向左");
                }            if (e.KeyCode == Keys.Right && e.Control)
                {
                    MessageBox.Show("向右");
                }
    的时候,tabpage也会跟着左右切换
    这个有好的解决方案么?
      

  5.   

    重写wndproc,吃掉wm_keypress消息。
    或者 e.Handled = true