C# 停止';丁';按Enter键时
我有一个非常简单的Windows窗体应用程序。而且,在Windows(或至少Windows窗体应用程序)中,当您在单行文本框控件内按Enter键时,您会听到叮当声。这是一个令人不快的声音,表示您不能输入换行符,因为它是单行文本框 这一切都很好。然而,在我的表单中,我有一个文本框和一个搜索按钮。我允许用户在完成键入后按Enter键执行搜索,这样他们就不必使用鼠标单击搜索按钮 但是这种叮当声发生了。这很烦人 我们怎样才能让声音在我的状态下完全消失呢 @David H-以下是我检测回车键的方式:C# 停止';丁';按Enter键时,c#,winforms,audio,system-sounds,C#,Winforms,Audio,System Sounds,我有一个非常简单的Windows窗体应用程序。而且,在Windows(或至少Windows窗体应用程序)中,当您在单行文本框控件内按Enter键时,您会听到叮当声。这是一个令人不快的声音,表示您不能输入换行符,因为它是单行文本框 这一切都很好。然而,在我的表单中,我有一个文本框和一个搜索按钮。我允许用户在完成键入后按Enter键执行搜索,这样他们就不必使用鼠标单击搜索按钮 但是这种叮当声发生了。这很烦人 我们怎样才能让声音在我的状态下完全消失呢 @David H-以下是我检测回车键的方式: pr
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
// Perform search now.
}
}
试一试
去看看酒店。您可以使用它为表单指定默认按钮,在本例中是按enter键
从文档中:
此属性允许您指定
当
用户在输入框中按ENTER键
应用指定给的按钮
此属性必须是
IButontrol当前处于启用状态
形成容器或位于容器内
当前表单
用户按下escape时还有一个属性。将搜索按钮的属性设置为
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;
}
}
If e.KeyCode = Keys.Enter Then
e.SuppressKeyPress = True
btnLogIn.PerformClick()
End If
取消按键将停止将事件发送到基础控件。如果您正在手动处理enter键在该文本框中执行的所有操作,则此操作应该有效。很抱歉使用Visual Basic。它适合我:
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;
}
}
按键是真正的诀窍。我希望这能对你有所帮助。你可以用按键代替上下键,这样效率更高
$("#txtSomething").keypress(function (e) {
if (e.which == 13) {
e.Handled = true; //This will prevent the "ding" sound
//Write the rest of your code
}
});
下面是如何处理
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Enter)
{
e.Handled = true;
button1.PerformClick();
}
}
对“叮”说声“平和”好吧,我和这个问题相处得够久了,在这里查了一下 在考虑了很长一段时间,想要用最简单的方法来修复它之后,我想出了最简单但不那么优雅的方法来修复它 这就是我所做的
我唯一能想到的另一种可能的优雅方式是编写一个新的击键处理类,这对于我的大多数项目来说都是一个非常重要的工作。只需添加
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
}
}
}
有一个非常小的机会,任何人都得到这个答案,但其他一些答案是真正可怕的。按下键时抑制事件
在一次打击中杀死另外两个事件。在此上下文中,将e.Handled
属性设置为true
是无用的最好的方法是将
Form.AcceptButton
属性设置为实际的搜索按钮。还有另一种利用
输入
键的方法-有些人可能希望它充当选项卡
按钮。为此,添加一个新的按钮
,将其位置
属性设置在表单
区域之外(即(-100,-100)
)-在某些情况下,将可见
属性设置为假
可能会禁用按钮
处理程序。将Form.AcceptButton
属性设置为新按钮。在中,单击事件处理程序添加以下代码
this。选择nextcontrol(ActiveControl,true,true,true,true)
现在,您可能只想在focus
打开TextBox
时转移focus
您可能想测试ActiveControl
类型,或者在不打算使用Enter
as选项卡的控件的事件处理程序中使用e.superss
属性
就这样。您甚至不需要在WinForms上捕获e.KeyCode
,因为没有指定表单属性AcceptButton,所以Enter键会发出叮当声。
如果不需要AcceptButton,可以通过将form KeyPreview设置为true并输入以下按键事件来抑制叮当声:
private void Form_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == '\r')
e.Handled = true;
}
无论哪个控件处于活动状态,按Enter键时都不会再有叮当声。由于按键事件处理顺序为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();
}
}
我更改了多行文本框的文本框属性,该属性对我有效。当焦点位于文本框中时,如何检测是否按下了Enter键?在属性窗格中,双击向下键或向上键事件。然后,在“代码视图”中,您键入我将要在问题中输入的代码。按键可能是正确的事件,您希望设置e.Handled=trueThank you,@David,我不知道:)我希望有某种方法来抑制恼人的叮当声,但允许按键冒泡。有时按键只是按键,不需要报警。正确,但只有当焦点仍然在文本框上时它才会工作。如果用户先按Tab
怎么办?@mdm取决于用户界面设计。也许OP只想要这个
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();
}
}