keyDown事件不适用于文本框

时间:2013-02-24 14:31:25

标签: c# winforms

我有一个简单的登录表单,我已将其接受按钮属性设置为“确定”按钮, 我有一个文本框“用户名”,我设置它的KeyDown事件来做一些处理。 Ok已启用设置为false。

btnOk.Enbled = false;  
this.AcceptButton = btnOk;
txtUsername.KeyDown += new KeyEventHandler(KeyDownHandle);

当我点击输入用户名文本框时,我会进行一些处理,然后将启用的接受按钮设置为true。

private void KeyDownHandle(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        // some processing
        btnOk.Enabled = true;
        txtPassword.Focus();
    }
}

然后我在密码文本框中输入密码并按Enter键以便触发“OK.Click”。

但问题是keyDown无效,因为“接受按钮” 我该怎么做才能解决这个问题?

编辑:只是想说如果我将acceptButton设置为“none”,问题就解决了,但这不是我正在寻找的。

1 个答案:

答案 0 :(得分:4)

为什么不从构造函数中删除this.AcceptButton = btnOk(我猜)并将其放在KeyDownHandler中,这样btnOk只有在启用后才会接受Enter键用户名已插入。所以代码应该是这样的:

btnOk.Enabled = false;
txtUsername.KeyDown += new KeyEventHandler(textBox1_KeyDown);
btnOk.Click += new EventHandler(button1_Click);


private void KeyDownHandle(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        // some processing
        btnOk.Enabled = true;
        this.AcceptButton = btnOk;
        txtPassword.Focus();
    }
}