繁体   English   中英

禁用回车键和退出键的蜂鸣声

[英]Disable beep of enter and escape key

我想禁用在TextBox中按回车键时发出的哔声。 我的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);
    }
}

您必须防止生成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;
        }

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

仅当您实际满意地处理了事件并且不希望进一步处理所讨论的事件时,才执行此操作。

经过多次“捣乱”之后,我发现您必须将包含控件的窗体上的KeyPreview值设置为True (在窗体属性下),然后使用KeyDown事件来测试您的击键,如果检测到它,则将True分配给两个e事件参数对象的“Handled”和“SuppressKeys”属性。

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

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

这对我有用。

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;
}
    private void txtMessage_KeyDown(object sender, KeyEventArgs e)
    {

        if (e.KeyCode == Keys.Enter)
        {
            e.SuppressKeyPress = true;
            _sendMessage.PerformClick();
        } 
    }       

在这里运行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,但是在那里不需要。

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

如果(e.KeyChar ==(char)Keys.Return)

 e.Handled = true;

再见了!

当然,只需拆分为 KeyDown 和 KeyUp:

private void txtUserName_KeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        #region (Disabled ... moved to txtUserName_KeyDown.)
        /*
        e.Handled = true;
        e.SuppressKeyPress = true;
        TimeStampPicker.txtUserName.Text = TimeStampPicker.txtUserName.Text.mzlxToUpper();
        TimeStampPicker.btnOK.Focus();
        //e.Handled = e.SuppressKeyPress = true;
        */
        #endregion
    }
    else
    {
        #region
        TimeStampPicker.txtUserName.Text = TimeStampPicker.txtUserName.Text.mzlxToUpper();
        TimeStampPicker.txtUserName.Select(TimeStampPicker.txtUserName.Text.Length, 0);
        #endregion
    }
}
private void txtUserName_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        #region
        e.Handled = true;
        e.SuppressKeyPress = true;
        TimeStampPicker.txtUserName.Text = TimeStampPicker.txtUserName.Text.mzlxToUpper();
        TimeStampPicker.btnOK.Focus();
        #endregion
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM