当我在文本框中按下回车键时发出烦人的蜂鸣声

5

我试图让一些东西在用户在文本框中按下回车键时发生,它确实起作用,但是会发出非常烦人的DING Windows错误声音。我已经查看了我的问题,并且显然在执行代码之前添加e.SuppressKeyPress = true;以及在执行完之后添加e.Handled = true;可以解决此问题,但是我的程序仍然会发出声音。这是我正在使用的代码:

private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
    e.SuppressKeyPress = true;
    if (e.KeyCode == Keys.Enter)
    {
        // A bunch of stuff goes here that I want to 
        // happen when the user hits enter               
    }
    e.Handled = true;
}

我做错了什么吗?这是其他人说你必须做的事情,但出于某种原因,对我没有起作用...

谢谢!


向上对于鼠标是有好处的,向下对于键盘是有好处的。如果你做错了,会发出“叮”的声音。 - Hans Passant
3个回答

7
您需要处理 KeyDown 事件,而不是 KeyUp ,以便抑制 KeyPress 事件。 KeyDown 文档解释了为什么要这样做,因为它列出了事件的顺序:
  • KeyDown
  • KeyPress
  • KeyUp
在您设置 e.SuppressKeyPress 的时候,KeyPress 事件已经发生了。

哎呀,我得改大约50个实例为keydown现在 xD 谢谢你,现在我知道问题出在哪里了! - Nathan
@Nathan:全局替换,或者像sublime text这样的编辑器可能会有所帮助 :) - Noctis
全局替换能否实际改变事件的执行方式?我是通过在控件的事件菜单中双击“KeyUp”并输入创建的方法来创建我的事件的。 - Nathan
@Nathan 是的,只要包括 .designer.cs 文件,因为那里是代码中发生钩子的地方。 - Reed Copsey

0

你做的并没有错,只是需要把 (e.supperkeypress = ture) 放在 if 语句里面。

private void textBox1_KeyUp(object sender, KeyEventArgs e)
{

    if (e.KeyCode == Keys.Enter)
    {
        e.SuppressKeyPress = true;
        // A bunch of stuff goes here that I want to 
        // happen when the user hits enter               
    }
    e.Handled = true;
}

0

可以试试这个!

private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
    e.SuppressKeyPress = true;
    if (e.KeyCode == (char)Keys.Enter)
    {
        // A bunch of stuff goes here that I want to 
        // happen when the user hits enter         
        e.Handled = true;      
    }  
}

你应该修改你的答案,使其不仅仅是一段代码片段。尝试解释这段代码片段正在做什么,并链接到一些相关资源。 - ankh-morpork

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