SendKeys.Send() 与 SendKeys.SendWait() 一样,靠不住。偶尔会没反应。
有没有什么替代方案?这是重写网格中的事件,让回车跳到下一个单元格。经常出现按回车没反应的情况,有时急得想把回车键给砸了,非得关掉窗体再打开才行。
//public partial class MyGrid : DataGridView
protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
{
      //回车换Tab
      if (keyData == Keys.Enter)
      {
          SendKeys.SendWait("{tab}");
          //System.Threading.Thread.Sleep(100);
          return true;
      }
}

解决方案 »

  1.   

    //return (Enter) キー。
                    if (e.KeyChar == 13)
                    {
                        System.Windows.Forms.SendKeys.Send("{TAB}");
                    }
    这样试试
      

  2.   

    //上面代码后面少复制了 return base.ProcessCmdKey(ref msg, keyData);
      

  3.   

    偶尔出现失效的时候,我把断点放在 SendKeys 那句,断点会命中,说明代码会运行,只是结果被什么偷吃了。
      

  4.   

    这样试试
    protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
    {
        return base.ProcessCmdKey(ref msg, keyData == Keys.Enter ? Keys.Tab : keyData);
    }
      

  5.   

    @dongxinxi (夕阳西下,断肠人在跳崖)
    关键是这样它不会跳,所以才找 SendKeys来顶替。
      

  6.   

    protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
    {
      //回车换Tab
      if (keyData == Keys.Enter)
      {
        .....
      }
      else
        base.ProcessCmdKey(.....);
      

  7.   

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
            {
                base.ProcessCmdKey(ref msg, keyData);
                int WM_KEYDOWN = 256;
                int WM_SYSKEYDOWN = 260;
                bool _disable = false;
                if (msg.Msg == WM_KEYDOWN || msg.Msg == WM_SYSKEYDOWN)
                {
                    switch (keyData)
                    {
                        //重载回车键
                        case Keys.Enter:
                            SendKeys.Send("{Tab}");
                            _disable = true;
                            break;
                    }
                }
                return _disable;
            }
      

  8.   

    >>>>>> 这不就是0楼的代码么?>>>>>> 直接运行都不行,在外面再裹层if语句,更不行。
    这问题客户那经常出现,而且我这里都可以问题再现,运气孬的时候还可以用断点跟踪到。
      

  9.   

    你的问题一定是在NET4.0下发生的吧?