用C#在VS中写程序是出现个问题,描述如下:
比如,我在窗体中放了txtNameID和txtName两个控件,txtNameID的TabIndex设置为1,txtName的TabIndex设置为2,那么启动窗体后,应该txtNameID获得焦点,按Tab键后txtName获得焦点。
可是,为什么以下代码会抢走窗体显示时TabIndex值更小的txtNameID控件的焦点呢?(就是每次启动窗体焦点都在txtName上,而不在txtNameID上)
如果用别的方法,不用Leave方法就不会有这样的问题,可是我是想在每次填完这个空后进行判断的。
有没有什么解决帮忙,谢谢^_^
        private void txtName_Leave(object sender, EventArgs e)
        {
            if (txtName.Text.Length <= 0 || txtName.Text.Length > 4)
            {
                MessageBox.Show("姓名必须为2~4个汉字", "姓名错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtName.Focus();
            }
        }

解决方案 »

  1.   

    在Load中加一句:
    txtNameID.Focus();
      

  2.   

    建议不要用Leave事件作校验,用Validating事件,Validating事件就是用来做校验的:    private void txtName_Validating(object sender, CancelEventArgs e)
        {
            if (txtName.Text.Length <= 0 || txtName.Text.Length > 4)
            {
                MessageBox.Show("姓名必须为2~4个汉字", "姓名错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                e.Cancel = true;
            }
        }