protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            if (keyData == Keys.Enter &&
               (
                (!(ActiveControl is System.Windows.Forms.TextBox) ||
                !((System.Windows.Forms.TextBox)ActiveControl).AcceptsReturn)
                ) 
             )
            {
                SendKeys.SendWait("{Tab}");
                return true;
            }
            if (keyData == (Keys.Enter | Keys.Shift))
            {
                SendKeys.SendWait("+{Tab}");
                return true;
            }
            return base.ProcessCmdKey(ref msg, keyData);
        } 这段代码解决窗体上用回车键替代TAB键,但是我窗体上有个Button控件,按回车后无法响应click事件,请问有什么办法既能解决txtBox,combobox上回车代替TAB键,又不影响Button回车后响应click事件呢?

解决方案 »

  1.   

    KeyPress事件 if(e.KeyChar==13) 
    { }
      

  2.   

    只是提供思路,没有测试.自己看看
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
            {
    bool flag=null;
    //如果是Button就执行.
    if(!(ActiveControl is System.Windows.Forms.Button))
    {
    if (keyData == Keys.Enter &&
      (
    (!(ActiveControl is System.Windows.Forms.TextBox) ||
    !((System.Windows.Forms.TextBox)ActiveControl).AcceptsReturn)
    )
    )
    {
    SendKeys.SendWait("{Tab}");
    return true;
    }
    if (keyData == (Keys.Enter | Keys.Shift))
    {
    SendKeys.SendWait("+{Tab}");
    return true;
    }
    flag= base.ProcessCmdKey(ref msg, keyData);
    }
    else //如果是button,就返回false,让执行自己的事件.
    {
    flag=false;
    }
    return flag;
            } 
      

  3.   

    protected override bool ProcessDialogKey(Keys keyData)
    {
        if ((ActiveControl is TextBox || ActiveControl is ComboBox) && 
            keyData == Keys.Enter)
        {
            keyData = Keys.Tab;
        }
        return base.ProcessDialogKey(keyData);
    }
    //--------------------
    protected override bool ProcessDialogKey(Keys keyData)
    {
        switch (keyData)
        {
            case Keys.Enter:
                if (((ActiveControl is TextBox && !((TextBox)ActiveControl).Multiline) ||
                    ActiveControl is ComboBox))
                {
                    keyData = Keys.Tab;
                }
                break;
        }
        return base.ProcessDialogKey(keyData);
    }
      

  4.   

    ActiveControl is TextBox // 判断一下当前输入焦点是在那类控件中
    并且排除多行文本的情况