按Enter键时停止“Ding”

我有一个非常简单的Windows窗体应用程序。 而且,在Windows(或至lessWindows窗体应用程序)中,当您在单行文本框控件中按下Enter键时,您会听到丁。 这是一个不愉快的声音,表明你不能input换行符,因为它是一个单行文本框。

这一切都很好。 但是,在我的表单中,我有1个文本框和一个searchbutton。 而且,我允许用户在完成input后按Enter键执行search,因此他们不必使用鼠标单击“search”button。

但是这个丁声发生了。 这非常烦人

我们怎样才能使声音在我的表格中完全不起作用?

@大卫H – 这是我如何检测input按下:

private void textBox1_KeyUp(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { // Perform search now. } } 

查看Form.AcceptButton属性。 您可以使用它来指定一个窗体上的默认button,在这种情况下,按下input。

从文档:

此属性使您能够指定一个默认的操作,当用户在您的应用程序中按ENTER键时发生。 分配给此属性的button必须是位于当前表单上或位于当前表单上的容器内的IButtonControl。

当用户按下转义键时也有一个CancelButton属性。

这个对我有用:

 private void textBox1_KeyDown(object sender, KeyEventArgs e) { //Se apertou o enter if (e.KeyCode == Keys.Enter) { //enter key is down this.doSomething(); e.Handled = true; e.SuppressKeyPress = true; } } 

SuppressKeyPress真的是绝招。 我希望能帮到你。

尝试

 textBox.KeyPress += new KeyPressEventHandler(keypressed); private void keypressed(Object o, KeyPressEventArgs e) { if (e.KeyCode == Keys.Enter) { e.Handled = true; //this line will do the trick } } 

您可以使用KeyPress而不是KeyUp或KeyDown更高效,以下是如何处理

  private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == (char)Keys.Enter) { e.Handled = true; button1.PerformClick(); } } 

说和平给'丁'

使用SuppressKeyPress可以在处理完按键后停止对按键的处理。

 public class EntryForm: Form { public EntryForm() { } private void EntryTextBox_KeyDown(object sender, KeyEventArgs e) { if(e.KeyCode == Keys.Enter) { e.Handled = true; e.SuppressKeyPress = true; // do some stuff } else if(e.KeyCode == Keys.Escape) { e.Handled = true; e.SuppressKeyPress = true; // do some stuff } } private void EntryTextBox_KeyUp(object sender, KeyEventArgs e) { if(e.KeyCode == Keys.Enter) { // do some stuff } else if(e.KeyCode == Keys.Escape) { // do some stuff } } } 

只需添加e.SuppressKeyPress = true; 在你的“if”声明中。

 private void textBox1_KeyUp(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { //If true, do not pass the key event to the underlying control. e.SuppressKeyPress = true; //This will suppress the "ding" sound.*/ // Perform search now. } } 

我偶然发现这篇文章,而试图处理一个KeyDown这为我工作。

 If e.KeyCode = Keys.Enter Then e.SuppressKeyPress = True btnLogIn.PerformClick() End If 

禁止按键停止将事件发送到底层控件。 如果您手动处理input键在文本框中执行的所有操作,这应该可以工作。 对不起,关于Visual Basic。

任何人都有机会得到这个答案,但其他一些答案是真正可怕的。 KeyDown上的抑制事件在一次罢工中杀死2个附加事件。 将e.Handled属性设置为true在这种情况下是无用的。
最好的方法是将Form.AcceptButton属性设置为实际的searchbutton。
还有另一种利用Enter键的方法 – 有些人可能希望它作为TABbutton。 要做到这一点,添加一个新的Button ,将其Location属性设置在Form区域之外(即(-100, -100) ) – 将Visible属性设置为false可能会在某些情况下禁用Button处理程序。 将Form.AcceptButton属性设置为您的新button。 在Click事件处理程序中添加以下代码
this.SelectNextControl(ActiveControl, true, true, true, true)

现在,您可能只想将focus转移到TextBox您可能想要testingActiveControltypes或在控件的事件处理程序中使用e.Supress属性,而不是使用Enter作为TAB 。 你甚至不需要捕获e.KeyCode

将您的searchbutton的IsDefault属性设置为true 。 这将使其成为默认button,并且当按下Enter时它将被自动点击。

 $("#txtSomething").keypress(function (e) { if (e.which == 13) { e.Handled = true; //This will prevent the "ding" sound //Write the rest of your code } }); 

那么我在这个问题上生活了足够长的时间,并在这里查找。

想了很长一段时间,想要最简单的方法来解决这个问题,我想出了一个最简单但不是最优雅的方法来修复它。

这是我做的。

  1. 在窗体上放置2个不可见的button“确定”和“取消”。
  2. 将窗体上的AcceptButton和CancelButton属性设置为不可见button。
  3. 没有添加代码的button!

这解决了在这个线程中列出的所有次要问题,包括ToolStripMenu。 我最大的抱怨是BindingNavigator,当我将一个logging号码input到当前位置导航到并按下input。

按照inputbutton时程序员想要的searchfunction的原始问题,我只需将search代码放在不可见的OKbutton中!

到目前为止,这似乎解决了所有问题,但正如我们都知道与Visual Studio,可能会出现一些事情。

我能想到的唯一可能的优雅方式是编写一个新的按键处理类,这对我的大部分项目来说都是非常有用的。

 void RTextBox_KeyDown(object sender, KeyEventArgs e) { if (e.KeyData == Keys.Enter) { //do ... bool temp = Multiline; Multiline = true; e.Handled = true; Multiline = temp; } } 
Interesting Posts