【问题标题】:Cannot disable beep sound on textbox keydown event无法在文本框 keydown 事件上禁用哔声
【发布时间】:2013-10-07 07:56:43
【问题描述】:

下面是我在文本框KeyDown() 事件上按“Enter”时禁用哔声的代码:

if (e.KeyCode == Keys.Enter)
{
    e.SuppressKeyPress = true;
    SaveData();
    e.Handled = true;
}

但是当我在文本框上按“Enter”时它会一直发出哔哔声。我做错了什么?

【问题讨论】:

  • 不是操作系统发出的声音吗?
  • 是的 Windows 哔声。如何禁用它?
  • @Dhaval 正如您从我的代码中看到的那样,我还将 HandledSuppressKeyPress 设置为 true,但它不起作用。
  • @Shohin 对不起我的错误
  • 也许声音是由其他东西发出的?想不出是什么,也许是另一个TextBox 或表格。

标签: c# winforms


【解决方案1】:

在您的 cmets 中,显示 MessageBox 会干扰您对 SuppressKeyPress 属性的设置。

解决方法是将 MessageBox 的显示延迟到方法完成后:

void TextBox1_KeyDown(object sender, KeyEventArgs e) {
  if (e.KeyCode == Keys.Enter) {
    e.SuppressKeyPress = true;
    this.BeginInvoke(new Action(() => SaveData()));
  }
}

【讨论】:

    【解决方案2】:

    编辑

    请注意,LarsTech (below) 提供的答案要好得多。


    抱歉,我刚刚意识到您有一个 MessageBox 正在显示。

    你可以做的是有一个Timer 并让它触发SaveData() 方法。

    private void Timer1_Tick(System.Object sender, System.EventArgs e)
    {
        Timer1.Enabled = false;
        SaveData();
    }
    

    然后在您的 TextBox 按键事件中,执行以下操作:

    if (e.KeyCode == Keys.Enter) {
        e.SuppressKeyPress = true;
        Timer1.Enabled = true;
    }
    

    这似乎行得通...

    【讨论】:

    • 没问题,我很高兴能帮上忙 =]
    • 不使用 Timer,更优雅的解决方案是使用 this.BeginInvoke() 来延迟 MessageBox 并防止蜂鸣。请参阅下面的 LarsTech 答案。
    • @MarisB。抱歉,这个答案是很久以前我刚开始的时候做出的。我同意下面的答案是更好的方法。我可以更新我的答案。
    【解决方案3】:

    您可以尝试创建自己的文本框并像这样处理 keydown 事件:

    public class MyTextBox : TextBox
    {
    
        protected override void OnKeyDown(KeyEventArgs e)
        {
            switch (e.KeyCode)
            {          
                case (Keys.Return):
                  /*
                   * Your Code to handle the event
                   * 
                   */                   
                    return;  //Not calling base method, to stop 'ding'
            }
    
            base.OnKeyDown(e);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-08
      • 2012-05-19
      • 1970-01-01
      相关资源
      最近更新 更多