【问题标题】:C# KeyEvent doesn't log the enter/return keyC# KeyEvent 不记录输入/返回键
【发布时间】:2010-03-20 16:35:02
【问题描述】:

我一直在用 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);

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

【问题讨论】:

  • 我在电脑上测试过,效果很好。

标签: c# events keyboard-events keyevent


【解决方案1】:

你有定义为默认操作的按钮吗?

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

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

【讨论】:

  • 听起来就像我需要的一样。但是如何将 DefaultAction 分配给按钮?
  • 谢谢你,我现在明白了。我将按钮设为我的默认操作,但它不起作用。但后来我发现它会触发按钮的“Click”事件,而我正在使用“MouseClick”事件。我想这是 Click 和 MouseClick 之间的唯一区别......
【解决方案2】:

尝试使用 KeyDown 事件。

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        MessageBox.Show("Enter");
    }
}

【讨论】:

  • 您订阅了该活动吗? textBox1.KeyDown += new KeyEventHandler(textBox1_KeyDown);
  • 是的,我确实这样做了,它再次适用于除输入按钮之外​​的所有键。这可能是我的电脑而不是代码的错误吗?
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    void tbPassword_KeyPress(对象发送者,KeyPressEventArgs e) { MessageBox.Show(e.KeyChar.ToString()); if (e.KeyCode == Keys.Enter){ // 这已处理并将从 Windows 消息泵中删除 e.Handled = true; } }

    【讨论】:

    • 确实,我经常忘记将它添加到我的事件处理程序中,谢谢,但这并不能解决我的问题......
    【解决方案5】:

    试试这个

    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);
        }
    }
    

    【讨论】:

    • 也可以添加 submitButton.PerformClick();如果您希望在 submitButton 上触发按钮单击事件
    • 对不起,不起作用...有没有办法检查输入键是否被某种方式“阻止”或以某种方式中断?
    【解决方案6】:

    转到您的表格...

    在基本形式中改变这个

    FormName.AcceptButton = buttonName;

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

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

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

    AcceptButton 自动从键盘读取回车键

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-04
      • 1970-01-01
      • 1970-01-01
      • 2013-03-08
      • 2014-01-10
      • 2015-06-08
      • 2022-11-15
      • 1970-01-01
      相关资源
      最近更新 更多