C# KeyEvent无法记录回车键

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

当文本框被选中(当然一直是被选中的),按下回车键时,代码会触发执行。也许这与代码的执行有关。


我在我的电脑上测试过了,它运行得很好。 - Zach Johnson
6个回答

7

你是否定义了一个默认操作按钮?

如果是这样,那么该控件将占用回车键。

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


听起来就像我需要的。但是我如何将DefaultAction分配给按钮? - Pieter888
谢谢,我现在已经弄清楚了。 我将按钮设置为默认操作,但它没有起作用。 后来我发现它会触发按钮的“Click”事件,而我却在处理“MouseClick”事件。 我想这就是Click和MouseClick之间唯一的区别... - Pieter888

0
尝试使用KeyDown事件。
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        MessageBox.Show("Enter");
    }
}

你订阅了事件吗? textBox1.KeyDown += new KeyEventHandler(textBox1_KeyDown); - Anthony Pegram
是的,我确实这样做了,再次尝试时所有按键都起作用了,但回车键除外。 这可能是我的电脑出错了,而不是代码的问题吗? - Pieter888

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

如果您希望触发submitButton的按钮单击事件,也可以添加submitButton.PerformClick(); - galford13x
抱歉,不起作用了... 有没有办法检查回车键是否被“阻止”或中断了? - Pieter888

0
也许你应该使用表单的“AcceptButton”将其设置为提交按钮。我想这才是你真正想要的...

0

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

void tbPassword_KeyPress(object sender, KeyPressEventArgs e)
{
    MessageBox.Show(e.KeyChar.ToString());
    if (e.KeyCode == Keys.Enter){
      // 这个已经被处理并且将从Windows消息队列中移除
      e.Handled = true; 
    }
}

我确实经常会忘记将它添加到我的事件处理程序中,谢谢,但这并不能解决我的问题... - Pieter888

0

前往您的表单...

在基本表单中更改此内容

FormName.AcceptButton = buttonName;

这将自动读取输入的键日志文件...

如果您不希望用户看到接受按钮,可以执行此操作

buttonName.Visible = false; FormName.AcceptButton = buttonName;

AcceptButton会自动从键盘读取Enter键


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接