8

我想禁用按 Enter 键时发出的哔声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);
            }
    }
4

7 回答 7

29

您必须防止生成 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;
        }
于 2012-12-19T13:37:54.430 回答
4

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

仅当您实际对事件进行了满意的处理并且不希望对相关事件进行任何进一步处理时,才执行此操作。

于 2012-12-19T12:57:36.047 回答
2

这对我有用。

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;
}
于 2015-07-03T14:29:04.880 回答
2

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

于 2018-07-21T14:50:04.510 回答
2

经过多次“捣蛋”后,我发现您必须将包含控件的表单上的“KeyPreview”值设置为“True”(在表单属性下),然后使用“KeyDown”事件来测试您的击键,如果它是检测到将“True”分配给“e”事件参数对象的“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
于 2021-07-14T14:25:58.800 回答
1
    private void txtMessage_KeyDown(object sender, KeyEventArgs e)
    {

        if (e.KeyCode == Keys.Enter)
        {
            e.SuppressKeyPress = true;
            _sendMessage.PerformClick();
        } 
    }       
于 2016-08-08T13:11:45.160 回答
1

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

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

 e.Handled = true;

那么再见了bip!!!

于 2019-04-12T21:37:25.173 回答