C# 停止';丁';按Enter键时

C# 停止';丁';按Enter键时,c#,winforms,audio,system-sounds,C#,Winforms,Audio,System Sounds,我有一个非常简单的Windows窗体应用程序。而且,在Windows(或至少Windows窗体应用程序)中,当您在单行文本框控件内按Enter键时,您会听到叮当声。这是一个令人不快的声音,表示您不能输入换行符,因为它是单行文本框 这一切都很好。然而,在我的表单中,我有一个文本框和一个搜索按钮。我允许用户在完成键入后按Enter键执行搜索,这样他们就不必使用鼠标单击搜索按钮 但是这种叮当声发生了。这很烦人 我们怎样才能让声音在我的状态下完全消失呢 @David H-以下是我检测回车键的方式: pr

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

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

但是这种叮当声发生了。这很烦人

我们怎样才能让声音在我的状态下完全消失呢

@David H-以下是我检测回车键的方式:

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();
        }
    }

对“叮”说声“平和”

好吧,我和这个问题相处得够久了,在这里查了一下

在考虑了很长一段时间,想要用最简单的方法来修复它之后,我想出了最简单但不那么优雅的方法来修复它

这就是我所做的

  • 在表单上放置两个不可见的按钮“确定”和“取消”
  • 将窗体上的AcceptButton和CancelButton属性设置为不可见按钮
  • 没有添加任何代码到按钮 这解决了该线程中列出的所有次要问题,包括ToolStripMenu。我最大的抱怨是BindingNavigator,当时我会在当前位置输入一个记录编号,然后按enter键

    根据最初的问题,当按下回车按钮时,程序员想要一个搜索功能,我只是将搜索代码放在不可见的OK按钮中

    到目前为止,这似乎解决了所有问题,但正如我们都知道的那样,VisualStudio可能会出现一些问题


    我唯一能想到的另一种可能的优雅方式是编写一个新的击键处理类,这对于我的大多数项目来说都是一个非常重要的工作。

    只需添加
    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();
        }
    }