这是代码private void Form1_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
{
     if(e.KeyCode==Keys.Enter)
     {
SendKeys.Send("{Tab}");
e.Handled=true;
      }
}在窗口中加入这段代码后,窗口上有textbox1,textbox2,当前焦点在textbox2,我点击button1时,弹出一个messagebox,这时按下enter,焦点会到textbox1上,而我想保持textbox2焦点不变,怎么办?

解决方案 »

  1.   

    你可以在Text2_Validate事件里面设置e.Cancel
      

  2.   

    但是我有很多窗口,不会都要设置吧,我是想有没有一通用的办法在messagebox.show后不移动焦点。
      

  3.   

    你提的问题蛮奇怪的。点击button1时,焦点已经是button1了~
      

  4.   

    有一点刚才忘了,现在补充:
    button的单击事件里有代码验证text2的输入,如无效则自动将焦点移到text2将验证写在控件的Validate不行,因为我是一个button验证所有控制的输入,比如这个button是保留,那么在保存就要验证所有输入,如哪个控件输入无效,则将光标定位到那个控件。
      

  5.   

    那么可以通过这样子来(手工打的,没有验证):
    foreach(Control ctrl in this.Controls)
    {
      if(ctrl.GetType=typeof(TextBox)
      {
        if(!ValidateTextBox(ctrl)) 
          return;
      }
    }private bool ValidateTextBox(Control ctrl)
    {
      string strMsg;  //检查你的所有控件
      switch (ctrl.Name)
      {
        case textBox1.Name:
          //验证失败时,赋值strMsg
          strMsg="这个地方错了,要注意哦";
          break;
        case textBox2.Name:
      }  if(strMsg!=null)
      {
        MessageBox.Show(...);
        ctrl.Focus();
        return false;
      }  return true;
    }
      

  6.   

    用上述代码加上enter切换焦点的话就会出现我说的情况,焦点不会停在有误的textbox2,而是textbox1