日期:2014-05-17  浏览次数:21293 次

SendKeys.Send() 不稳定
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;
      }
}

------解决方案--------------------
//return (Enter) ??。
                if (e.KeyChar == 13)
                {
                    System.Windows.Forms.SendKeys.Send("{TAB}");
                }
这样试试
------解决方案--------------------
这样试试
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);
}

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



------解决方案--------------------
不但不稳定,不同的操作系统还不执行呢
------解决方案--------------------
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 
------解决方案--------------------
 ms