Question

I want to disable the beep sound that i get when i press enter in a textbox. My KeyDown event is:

 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);
            }
    }
Was it helpful?

Solution

You have to prevent the KeyPressed event from being generated, that's the one that beeps. That requires setting the SuppressKeyPress property to true. Make that look similar to:

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

OTHER TIPS

If you want to prevent the event from bubbling up in Winforms or WPF/Silverlight, you need to set e.Handled to true from within the event handler.

Only do this if you have actually handled the event to your satisfaction and do not want any further handling of the event in question.

this works for me.

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;
}

Running VS 2015 here and the above answers did not work for me. In order to suppress the beep on a hard return (in both textboxes and checkboxes), I switched from the KeyDown event to the KeyPress event and did the following:

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

There is no e.SuppressKeyPress in the KeyPress event, but it is not needed there.

    private void txtMessage_KeyDown(object sender, KeyEventArgs e)
    {

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

Just set the Form KeyPreview property to true, then add the following code to The Form KeyPress event;

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

 e.Handled = true;

then bye the bip!!!

After much "mucking" around, I found that you must set the "KeyPreview" value on the form containing your controls to "True" (under Form Properties) then use the "KeyDown" event to test for your keystroke, and if it is detected assign "True" to both the "e" event args object's "Handled and "SuppressKeys" properties.

The following is VB.NET code, but the same methodology works in "C#" Notice that the action is a keypress on the FORM, not the control itself.

    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
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top