按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
键的方法 – 有些人可能希望它作为TAB
button。 要做到这一点,添加一个新的Button
,将其Location
属性设置在Form
区域之外(即(-100, -100)
) – 将Visible
属性设置为false
可能会在某些情况下禁用Button
处理程序。 将Form.AcceptButton
属性设置为您的新button。 在Click
事件处理程序中添加以下代码
this.SelectNextControl(ActiveControl, true, true, true, true)
现在,您可能只想将focus
转移到TextBox
您可能想要testingActiveControl
types或在控件的事件处理程序中使用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 } });
那么我在这个问题上生活了足够长的时间,并在这里查找。
想了很长一段时间,想要最简单的方法来解决这个问题,我想出了一个最简单但不是最优雅的方法来修复它。
这是我做的。
- 在窗体上放置2个不可见的button“确定”和“取消”。
- 将窗体上的AcceptButton和CancelButton属性设置为不可见button。
- 没有添加代码的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; } }