按回车时停止“叮”

我有一个非常简单的 Windows 窗体应用程序。而且,在 Windows (或者至少是 Windows 窗体应用程序)中,当您在单行 TextBox 控件内按 Enter 时,会听到叮的一声。这是一个令人不快的声音,表明您不能输入换行符,因为它是一个单行 TextBox。

一切都很好。但是,在我的表单中,我有一个文本框和一个搜索按钮。我允许用户在完成输入后按下 Enter 键来执行搜索,这样他们就不会使用 鼠标来单击 Search 按钮。

但是这个叮的声音出现了,非常烦人。

我们怎样才能使声音在我的形态中根本无法播放呢?

@ David H-我是这样检测输入按键的:

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

试试看

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

检查 表格。接受按钮属性。您可以使用它为窗体指定默认按钮,在本例中为按 Enter。

来自文件:

此属性使您能够指定 时发生的默认操作 用户按下您的 应用程序。分配给 此属性必须是 控件,该控件位于当前 形式或位于容器内 当前的形式。

当用户按转义键时,还有一个 取消按钮属性。

将“搜索”按钮的 是默认的属性设置为 true。这将使其成为默认按钮,当按下 Enter 时将自动单击该按钮。

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

我无意中发现了这个帖子,当时我正在尝试处理一个对我有用的 KeyDown。

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

禁用按键将停止将事件发送到基础控件。如果您正在手动处理 Enter 键将在该文本框中执行的所有操作,那么这应该可以工作。关于 VisualBasic 我很抱歉。

这对我很有用:

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 才是真正的诀窍,我希望它能帮到你。

$("#txtSomething").keypress(function (e) {
if (e.which == 13) {


e.Handled = true; //This will prevent the "ding" sound


//Write the rest of your code
}
});

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

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

向“叮”说声和平

我在这个问题上生活了很长时间,并在这里查找。

在思考了相当长的一段时间,并希望最简单的方式来修复它,我想出了最简单,但不是那么优雅的方式来修复它。

我是这么做的。

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

这解决了此线程中列出的所有次要问题,包括 ToolStripMenu。我最大的抱怨是 BindingNavigator,当我在“当前位置”中输入一个记录编号以导航到并按回车键时。

根据最初的问题,程序员想要一个搜索功能时,按下输入按钮,我只是把搜索代码在不可见的确定按钮!

到目前为止,这似乎解决了所有问题,但我们都知道,与 VisualStudio,一些可能会突然出现。

我能想到的唯一可能的其他优雅的方法是编写一个新的击键处理类,这对我的大多数项目来说都是很繁重的工作。

只需在“ if”语句中添加 e.SuppressKeyPress = true;

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.
}
}

使用 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


}
}
}

任何人都很少有机会得到这个答案,但其他一些答案确实令人恐惧。KeyDown上的抑制事件在一次攻击中杀死2个附加事件。在此上下文中,将 e.Handled属性设置为 true是无用的。
最好的方法是将 Form.AcceptButton属性设置为实际的 Search Button。
还有另一种方式利用 Enter键-一些人可能希望它作为 TAB按钮。为此,添加一个新的 Button,将其 Location属性设置在 Form区域之外(即 (-100, -100))-将 Visible属性设置为 false可能会在某些情况下禁用 Button处理程序。将 Form.AcceptButton属性设置为新按钮。在 TAB0事件处理程序中添加以下代码
this.SelectNextControl(ActiveControl, true, true, true, true)

现在,您可能想要转移 focus只有当 focus它对 TextBox你可能想要或者测试 ActiveControl类型或使用 e.Supress属性在事件处理程序的控件不意味着使用 Enter作为 TAB 就是这样,你甚至不需要捕捉 e.KeyCode

在 WinForms 上,Enter 键会发出 Ding 声音,因为没有指定表单属性 AcceptButton。 如果不需要 AcceptButton,可以通过将表单 KeyPreview 设置为 true 并输入以下 KeyPress 事件来抑制叮声:

private void Form_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == '\r')
e.Handled = true;
}

无论什么控制是活跃的,将没有更多的叮声时,按下回车键。由于键事件处理顺序是 KeyDown,因此 KeyPress 和 KeyUp 的 Enter 键对于控件的 KeyDown 事件仍然有效。

可以将文本框多行设置为 true,然后按 Enter 键。

private void yourForm_Load(object sender, EventArgs e)
{
textBox1.Multiline = true;
}


//then write your TextBox codes
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
// doSomething();
}
}

我更改了一个多行文本框的文本框属性,它适合我。

关于 e.SuppressKeyPress = true;解决方案,它本身工作得很好。将 SuppressKeyPress设置为 true 也将 Handled设置为 true,因此不需要使用 e.Handled= true;