键入"Enter"或"Esc"时如何停止窗口错误声音

Joh*_*aft 7 c# winforms

我有一个带有单个文本框的表单.没有其他控制.每当我输入"Enter"键或"Esc"键时,表单就会按照我的意愿运行; 但我听到可怕的Windows错误声音.代码看起来类似于以下内容......

public class EntryForm: Form
{
  public EntryForm()
  {
  }

  private void EntryTextBox_KeyUp(object sender, KeyEventArgs e)
  {
    if(e.KeyCode == Keys.Enter)
    {
      // do some stuff
      Hide(); // I've also used DialogResult = DialogResult.OK here
      e.Handled = true;
    }
    else if(e.KeyCode == Keys.Escape)
    {
      Hide(); // I've also used DialogResult = DialogResult.Cancel here
      e.Handled = true;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我可以通过将以下代码添加到窗体的构造函数来"破解"它并使噪声停止.

AcceptButton = new Button();
CancelButton = new Button();
Run Code Online (Sandbox Code Playgroud)

正如我所说,这导致声音无法发挥,但我认为这是不好的形式; 特别是因为我不需要表格上的按钮.

任何人都知道为什么这是行为,如果有更清晰的方法来阻止播放错误声音?

And*_*rew 12

在KeyDown事件中,设置e.Handled = true和e.SuppressKeyPress = true.


Han*_*ant 7

有一个更"正确"的修复程序,无论你有多少控件都可以使用,并遵循Windows窗体设计模型.将此代码粘贴到您的表单中:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
  if (keyData == Keys.Escape || keyData == Keys.Enter) {
    this.Hide();
    return true;
  }
  return base.ProcessCmdKey(ref msg, keyData);
}
Run Code Online (Sandbox Code Playgroud)