按Enter键时停止'Ding'

时间:2011-06-09 09:50:01

标签: c# winforms audio system-sounds

我有一个非常简单的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.
    }
}

16 个答案:

答案 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) focusfocus转移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)

嗯,我和这个问题的关系已经存在了很长时间,并在这里查看。

在考虑了这个问题很长一段时间后,想要用最简单的方法解决这个问题,我提出了最简单但不那么优雅的解决方法。

这就是我所做的。

  1. 放2个隐形按钮" Ok"和"取消"在表格上。
  2. 将表单上的AcceptButton和CancelButton属性设置为隐藏按钮。
  3. 没有为按钮添加任何代码!
  4. 这解决了此线程中列出的所有次要问题,包括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;
    }
}