我有一个非常简单的Windows窗体应用程序。而且,在Windows(或至少Windows窗体应用程序)中,当您在单行TextBox控件中按Enter键时,您会听到一个丁。这是一个不愉快的声音,表示你无法输入换行符,因为它是一个单行的TextBox。
这一切都很好。但是,在我的表单中,我有1个TextBox和一个搜索按钮。我允许用户在完成输入后按Enter键执行搜索,这样他们就不会 使用鼠标点击搜索按钮。
但是这个丁声就出现了。这很烦人。
我们怎样才能使声音在我的表格中根本不发挥?
@David H - 这是我如何检测输入按下:
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
// Perform search now.
}
}
答案 0 :(得分:171)
它对我有用:
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是真正的伎俩。我希望能帮助你。
答案 1 :(得分:50)
尝试
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
}
}
答案 2 :(得分:48)
查看Form.AcceptButton属性。您可以使用它来指定表单的默认按钮,在这种情况下是按Enter键。
来自文档:
此属性使您可以指定 一个默认动作发生时 用户按下你的输入键 应用。分配给的按钮 这个属性必须是 当前的IButtonControl 形式或位于容器内 目前的形式。
当用户按下escape时,还有一个CancelButton属性。
答案 3 :(得分:10)
您可以使用KeyPress代替KeyUp或KeyDown,效率更高 以及如何处理
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Enter)
{
e.Handled = true;
button1.PerformClick();
}
}
并向丁先生表示和平。
答案 4 :(得分:8)
只需在“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.
}
}
答案 5 :(得分:7)
使用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
}
}
}
答案 6 :(得分:2)
我在试图处理一个对我有用的KeyDown时偶然发现了这篇文章。
If e.KeyCode = Keys.Enter Then
e.SuppressKeyPress = True
btnLogIn.PerformClick()
End If
按下按键可以阻止事件发送到基础控件。如果您手动处理输入键将在该文本框中执行的所有操作,则此操作应该有效。对于Visual Basic感到抱歉。
答案 7 :(得分:2)
任何人都没有机会得到这个答案,但其他一些答案真的很可怕。抑制KeyDown
上的事件会在一次攻击中杀死2个额外事件。在此上下文中将e.Handled
属性设置为true
是无用的。
最好的方法是将Form.AcceptButton
属性设置为实际的搜索按钮
还有另一种使用Enter
密钥的方法 - 有些人可能希望它充当TAB
按钮。为此,请添加新的Button
,将其Location
属性设置在Form
区域之外(即(-100, -100)
) - 将Visible
属性设置为{{1在某些情况下,可能会禁用false
个处理程序。将Button
属性设置为新按钮。在Form.AcceptButton
事件处理程序中添加以下代码
Click
现在,您可能只想在this.SelectNextControl(ActiveControl, true, true, true, true)
focus
上focus
转移TextBox
,您可能想要测试ActiveControl
类型或使用e.Supress
属性控件的事件处理程序无意使用Enter
作为TAB
就是这样。你甚至不需要捕获e.KeyCode
答案 8 :(得分:1)
$("#txtSomething").keypress(function (e) {
if (e.which == 13) {
e.Handled = true; //This will prevent the "ding" sound
//Write the rest of your code
}
});
答案 9 :(得分:1)
在WinForms上,由于未指定表单属性AcceptButton,Enter键会产生叮叮声。 如果您不需要AcceptButton,可以通过将KeyPreview形式设置为true并输入以下KeyPress事件来抑制叮叮声:
private void Form_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == '\r')
e.Handled = true;
}
无论哪个控件处于活动状态,按Enter键都不会再有叮当声。由于键事件的处理顺序为KeyDown,KeyPress和KeyUp,因此Enter键仍可用于控件的KeyDown事件。
答案 10 :(得分:0)
将搜索按钮的IsDefault属性设置为true
。这将使其成为默认按钮,按下Enter键时将自动单击该按钮。
答案 11 :(得分:0)
嗯,我和这个问题的关系已经存在了很长时间,并在这里查看。
在考虑了这个问题很长一段时间后,想要用最简单的方法解决这个问题,我提出了最简单但不那么优雅的解决方法。
这就是我所做的。
这解决了此线程中列出的所有次要问题,包括ToolStripMenu。我最大的抱怨是BindingNavigator,当我在当前位置输入一个记录号以导航到并按下回车。
根据按下输入按钮时程序员想要搜索功能的原始问题,我只需将搜索代码放入隐形OK按钮!
到目前为止,这似乎解决了所有问题,但正如我们都知道Visual Studio,可能会出现一些问题。
我能想到的唯一另一种可能的优雅方式是编写一个新的击键处理类,这对我的大多数项目来说都是很有用的。
答案 12 :(得分:0)
您可以将文本框多行设置为true,然后按Enter键。
.wpcf7-form-control.wpcf7-checkbox{
float: left;
width: 100%;
margin: 0;
padding: 0;
}
答案 13 :(得分:0)
我更改了多行文本框的文本框属性,并且对我有用。
答案 14 :(得分:0)
关于 e.SuppressKeyPress = true;
解决方案,它本身工作正常。将 SuppressKeyPress
设置为 true 也会将 Handled
设置为 true,因此无需使用 e.Handled= true;
答案 15 :(得分:-2)
void RTextBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.Enter)
{
//do ...
bool temp = Multiline;
Multiline = true;
e.Handled = true;
Multiline = temp;
}
}