不好意思 少了一句
return base.ProcessCmdKey(ref msg, keyData);

解决方案 »

  1.   

    1,不要随便重载系统消息,会降速的2,你的写法不标准很浪费,应该先if (msg.Msg == 0x100 || msg.Msg == 0x104) {1)如果你的意思是想TAB 键"执行我想要的代码",但shift+tab 不执行原来的代码就可以啊,比如:protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
    if (msg.Msg == 0x100 || msg.Msg == 0x104) {
    if ((int)keyData == 0x09) {
    //UserCode_Leave(new object(),new System.EventArgs());
    return true;
    }
    } return base.ProcessCmdKey(ref msg, keyData);
    }2)如果你的意思是想TAB 键"执行我想要的代码",但shift+tab 也执行,比如:protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
    if (msg.Msg == 0x100 || msg.Msg == 0x104) {
    if ((int)keyData == 0x10000 + 0x09 || (int)keyData == 0x09) {
    //UserCode_Leave(new object(),new System.EventArgs());
    return true;
    }
    } return base.ProcessCmdKey(ref msg, keyData);
    }
      

  2.   

    至于你还有个 && (this.ActiveControl == this.UserCode) 自己加上就是了
      

  3.   

    其中的 0x100 0x104 分别代表:
    public const int WM_KEYDOWN = 0x100;
    public const int WM_SYSKEYDOWN = 0x104;0x10000 和 0x9 分别代表 shift(不是Keys.ShiftKey) 和tab你可以下载 api explorer 帮你声明 from: http://zpcity.com/arli/