重写ProcessCmdKey函数后,程序只对其中捕获的按键信息有反应,按其他键则没有任何反应,这可怎么办阿?

解决方案 »

  1.   

    protected override bool ProcessCmdKey(ref Message msg,Keys keyData)
    {
    if ( (!(ActiveControl is Button)) && (keyData==Keys.Up || keyData==Keys.Down || keyData==Keys.Enter))
    {
    if(keyData == Keys.Enter)
    {
    System.Windows.Forms.SendKeys.Send("{TAB}");
    return true;
    }
    if(keyData==Keys.Down )
    System.Windows.Forms.SendKeys.Send("{TAB}");
    else
    SendKeys.Send("+{Tab}");
    return true;
    }
    else
    return base.ProcessCmdKey(ref msg,keyData); ////是不是少了这个
    }
      

  2.   

    return base.ProcessCmdKey(ref msg,keyData); ////是不是少了这个
      

  3.   

    参考我的代码(测试通过:
    protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData) 
     

     
    if(EnterAsTab&&msg.WParam.ToInt32() == (int) Keys.Enter) 
     

     
    SendKeys.Send("{Tab}");
     
    return true;
     

     
    return base.ProcessCmdKey(ref msg, keyData); 
     
    }
      

  4.   

    还想问一下:
    string s;
    s = keyData.ToString();
    SendKeys.Send(s);我是这么写的,为什么不行了?
      

  5.   

    对了,还有一个问题, 就是如何判断按下的键盘信息是Ctrl+V了?
     我使用Key.Control+keys.V进行判断,但系统提示错误,说是不能使用“+”操作符?
     但是我看到有些人说可以这么写的阿
      

  6.   

    键 代码 
    BACKSPACE {BACKSPACE}、{BS} 或 {BKSP} 
    BREAK {BREAK} 
    CAPS LOCK {CAPSLOCK} 
    DEL 或 DELETE {DELETE} 或 {DEL} 
    DOWN ARROW(下箭头键) {DOWN} 
    END {END} 
    ENTER {ENTER} 或 ~ 
    ESC {ESC} 
    HELP {HELP} 
    HOME {HOME} 
    INS 或 INSERT {INSERT} 或 {INS} 
    LEFT ARROW(左箭头键) {LEFT} 
    NUM LOCK {NUMLOCK} 
    PAGE DOWN {PGDN} 
    PAGE UP {PGUP} 
    PRINT SCREEN {PRTSC}(保留供将来使用) 
    RIGHT ARROW(右箭头键) {RIGHT} 
    SCROLL LOCK {SCROLLLOCK} 
    TAB {TAB} 
    UP ARROW(上箭头键) {UP} 
    F1 {F1} 
    F2 {F2} 
    F3 {F3} 
    F4 {F4} 
    F5 {F5} 
    F6 {F6} 
    F7 {F7} 
    F8 {F8} 
    F9 {F9} 
    F10 {F10} 
    F11 {F11} 
    F12 {F12} 
    F13 {F13} 
    F14 {F14} 
    F15 {F15} 
    F16 {F16} 
    数字键盘加号 {ADD} 
    数字键盘减号 {SUBTRACT} 
    数字键盘乘号 {MULTIPLY} 
    数字键盘除号 {DIVIDE} 
      

  7.   

    楼上的大哥多谢了,可是我想知道的是组合键的信息是如何判断的?就是Ctrl+V怎么判别
      

  8.   

    对了,如果不是发送组合键,而是判断在DtaGrid中是否按下了ctrl+v
    请重写
    protected override bool ProcessDialogKey(Keys keyData)
      {
    if(keyData==(Keys.Control|Keys.V))

    }
    ctrl+v是系统键,不知道能不能行,不过我用ctrl+delete测试过,没问题,
    忘了是用|还是&,你试试
      

  9.   

    多谢lovevsnet(编程一把手),已经解决拉