问题1:在窗口LOAD时密码框获取焦点,用如下代码:
  
   private void LoginDlg_Load(object sender, EventArgs e)
        {
            this.tbPwd.Focus();
        }
  
结果:不能实现,窗口打开后没有任何控件获取焦点,为什么啊?难道窗口LOAD时不能获取焦点?问题2:在密码框中敲入回车键,启动OK按钮点击事件进行登陆,用如下代码:

      private void tbPwd_Enter(object sender, EventArgs e)
        {
            btnOK_Click(sender,e);
        } 
结果是:在窗口的任何位置点击鼠标左键或者回车键都启动OK按钮点击事件进行登陆,显然是不合理的,为什么?以上两问题如果要实现正确的应该怎样写?

解决方案 »

  1.   

    你的两个问题是关联的你一focus pwd这个控件就会出发enter事件
    一进来没有获得焦点你可以看看是不是pwd控件的tabindex或者它的父控件的tabindex设的比别的控件大了
    在pwd控件回车键应该捕获keydown事件里掉btnOK_Click(sender,e);
      

  2.   

    1: tbPwd.TabIndex = 0;2: 
    private void tbPwd_KeyDown(object sender, KeyEventArgs e)
    {
                if (e.KeyCode == Keys.Enter) btnOK_Click(sender, null);
    }
      

  3.   


      你的思路不正确  首先设Form.KeyPreview=True private void Form1_Activated(object sender, EventArgs e)
            {
                if (txtPwd.CanFocus) txtPwd.Focus();
            }        private void txtPwd_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Enter && (sender as TextBox).Text != "")
                    btnLogin.PerformClick();
            }        private void btnLogin_Click(object sender, EventArgs e)
            {
                MessageBox.Show("login....");
            }
      

  4.   

    每个Form都有DefaultButton,就是按回车默认的按钮,还有CancelButton.窗体属性里就可以设置的功能,还跑去写一大串后台代码, 对这样的学生我总是会水他们一顿.
      

  5.   

    你的两个问题是关联的你一focus pwd这个控件就会出发enter事件 
    一进来没有获得焦点你可以看看是不是pwd控件的tabindex或者它的父控件的tabindex设的比别的控件大了 
    在pwd控件回车键应该捕获keydown事件里掉btnOK_Click(sender,e);UP
      

  6.   


    是的,我查看了一下,pwd控件的tabindex的值=4,其他的控件都小于4,我把它改成0,就可以了。请解释一下tabindex值的具体含义?为什么会影响到获取焦点?为什么只是在窗口LOAD时才影响,在其它地方又不影响?例如在如下代码实现中就没有影响,PWD控件能正确获得焦点:private void btnOK_Click(object sender, EventArgs e)
    {
         if (user.Password != pwd)
         {
           MessageBox.Show("输入的命码不正确!!!", "提示", MessageBoxButtons.
                                OK, MessageBoxIcon.Warning);
           this.tbPwd.Focus();
          }
    }
      

  7.   

    load时窗体已经创建完成,只是没有显示出来。所以焦点到tabindex最小的控件上。
    Form1_Activated时窗体还没创建完成,可以在此时设置焦点。
    btnOK_Click时,激活了一个新的事件,所以可以设置新的焦点。