4

我一直在用 C# 制作这个登录表单,我想在用户单击提交或按下回车键后立即“提交”所有数据。

我一直在用 KeyEvents 进行一些测试,但到目前为止没有任何效果。

void tbPassword_KeyPress(object sender, KeyPressEventArgs e)
{
    MessageBox.Show(e.KeyChar.ToString());
}

上面的代码首先是为了测试事件是否有效。它工作得很好,当我按“d”时,它显示“d”,当我按“8”时,它显示“8”,但按 Enter 没有任何作用。

所以我认为这是因为 enter 并没有真正绑定到一个字符,但它确实显示了退格,它工作得很好,所以它让我对它为什么没有注册我的 enter 键感到困惑。

所以问题是: 如何记录回车键?为什么它现在不像它应该那样记录按键?

注意:我已将事件放在文本框中

tbPassword.KeyPress += new KeyPressEventHandler(tbPassword_KeyPress);

因此,当在选择文本框时按下回车按钮时它会触发(当然这是整个时间),这可能与代码的执行有关。

4

6 回答 6

7

您是否将按钮定义为默认操作?

如果是这样,那么该控件将吞噬 Enter 键。

也许这就是你的答案。您需要在提交按钮上将 DefaultAction 属性设置为 true。

于 2010-03-20T16:43:54.497 回答
0

请尝试使用 KeyDown 事件。

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        MessageBox.Show("Enter");
    }
}
于 2010-03-20T16:53:09.983 回答
0

也许您应该使用表单的“AcceptButton”将其设置为提交按钮。认为那是你真正的...

于 2010-03-20T16:56:13.043 回答
0

您遗漏了一个重要的部分,您必须Handled根据条件将属性设置为 true 或 false ...

void tbPassword_KeyPress(对象发送者,KeyPressEventArgs e)
{
    MessageBox.Show(e.KeyChar.ToString());
    if (e.KeyCode == Keys.Enter){
      // 这已处理并将从 Windows 消息泵中删除
      e.Handled = true;
    }
}
于 2010-03-20T17:24:18.480 回答
0

试试这个

textBox1.KeyPress += new KeyPressEventHandler(textBox1_KeyPress);

void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == '\r')
    {
        MessageBox.Show("Enter Key Pressed", "Enter Key Pressed", MessageBoxButtons.OK);
    }
}
于 2010-03-20T17:44:54.403 回答
0

去你的表格...

在基本形式中改变这个

FormName.AcceptButton = 按钮名;

这将自动读取 enter... 的关键日志文件..

如果您不希望用户看到接受按钮,您可以这样做

buttonName.Visible = false; FormName.AcceptButton = 按钮名;

AcceptButton 自动从键盘读取回车键

于 2010-11-28T19:46:34.783 回答