【问题标题】:Disable beep of enter and escape key c#禁用输入和退出键c#的哔声
【发布时间】:2012-12-06 20:06:01
【问题描述】:

我想禁用在textbox 中按 Enter 时发出的哔声。我的KeyDown 事件是:

 private void textBox_Zakljucak_KeyDown(object sender, KeyEventArgs e)
        {

            if ((e.KeyCode == Keys.Enter) || (e.KeyCode == Keys.Tab))
            {
                Parent.SelectNextControl(textBox_Zakljucak, true, true, true, true);
            }
            else if ((e.KeyCode == Keys.Back))
            {
                textBox_Zakljucak.Select(textBox_Zakljucak.Text.Length, 0);
            }
            else if (!Regex.IsMatch(textBox_Zakljucak.Text, @"^[0-9.-]+$"))
            {
                textBox_Zakljucak.Clear();
                textBox_Zakljucak.Select(textBox_Zakljucak.Text.Length, 0);
            }
    }

【问题讨论】:

标签: c# enter beep


【解决方案1】:

您必须防止生成 KeyPressed 事件,即发出哔哔声的事件。这需要将 SuppressKeyPress 属性设置为 true。使其看起来类似于:

        if ((e.KeyCode == Keys.Enter) || (e.KeyCode == Keys.Tab))
        {
            Parent.SelectNextControl(textBox_Zakljucak, true, true, true, true);
            e.Handled = e.SuppressKeyPress = true;
        }

【讨论】:

  • 如果有这样的东西怎么办: MessageBox.Show("Still beep!");在父母之前。[...]?蜂鸣声仍然会出现。
  • 这是不可避免的,消息框在您取消之前调度 KeyPressed 事件。不要使用 MessageBox 或使用 this.BeginInvoke() 延迟显示它。
【解决方案2】:

如果您想防止事件在 Winforms 或 WPF/Silverlight 中冒泡,您需要在事件处理程序中将 e.Handled 设置为 true

只有在您对事件的实际处理感到满意并且不希望对相关事件进行任何进一步处理时才这样做。

【讨论】:

    【解决方案3】:

    这对我有用。

    private void txtTextbox_KeyDown(object sender, KeyEventArgs e)
    {
        //do somthing
    
        if(e.KeyCode==Keys.Enter)
        {
            e.Handled=true;
            e.SuppressKeyPress=true;
        }
    }
    
    private void txtTextbox_KeyUp(object sender, KeyEventArgs e)
    {
        e.Handled=false;
        e.SuppressKeyPress=false;
    }
    

    【讨论】:

      【解决方案4】:

      在这里运行 VS 2015,上面的答案对我不起作用。为了抑制硬返回时的哔哔声(在文本框和复选框中),我从 KeyDown 事件切换到 KeyPress 事件并执行了以下操作:

      private void mTxtSrchStr1_KeyPress(object sender, KeyPressEventArgs e)
      {
          if (e.KeyChar == (char)Keys.Return)
          {
               this.sSearchFind();
               e.Handled = true;
          }
      }
      

      KeyPress 事件中没有 e.SuppressKeyPress,但那里不需要。

      【讨论】:

        【解决方案5】:
            private void txtMessage_KeyDown(object sender, KeyEventArgs e)
            {
        
                if (e.KeyCode == Keys.Enter)
                {
                    e.SuppressKeyPress = true;
                    _sendMessage.PerformClick();
                } 
            }       
        

        【讨论】:

        • 这个问题来自 3 年前,被标记为已接受。您的回答没有添加任何新内容。
        【解决方案6】:

        只需将Form KeyPreview 属性设置为true,然后将以下代码添加到Form KeyPress 事件中;

        if (e.KeyChar == (char)Keys.Return)

         e.Handled = true;
        

        那就再见吧!!!

        【讨论】:

          【解决方案7】:

          经过多次“摸索”后,我发现您必须将包含控件的表单上的“KeyPreview”值设置为“True”(在表单属性下) 然后使用“KeyDown”事件来测试你的击键,如果它被检测到 将“True”分配给“e”事件 args 对象的“Handled”和“SuppressKeys”属性。

          以下是 VB.NET 代码,但相同的方法适用于“C#” 请注意,该操作是 FORM 上的按键,而不是控件本身。

              Private Sub ThisForm_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
              If e.KeyCode = Keys.Escape Then
                  'turn off beep
                  e.Handled = e.SuppressKeyPress = True
              End If
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-05-02
            • 1970-01-01
            • 2012-04-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多