user1788654
user1788654

Reputation: 341

Disable beep of enter and escape key

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

Upvotes: 15

Views: 26341

Answers (8)

Louis M Mezei
Louis M Mezei

Reputation: 1

Sure, just split into KeyDown and 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
    }
}

Upvotes: 0

Abdelfahem Sidaoui
Abdelfahem Sidaoui

Reputation: 19

private void txtMessage_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        e.SuppressKeyPress = true;
        _sendMessage.PerformClick();
    } 
}       

Upvotes: 1

Ted Roth
Ted Roth

Reputation: 21

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.

Upvotes: 2

Chris Raisin
Chris Raisin

Reputation: 442

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

Upvotes: 2

Hans Passant
Hans Passant

Reputation: 941208

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

Upvotes: 37

Amor Ouerfelli
Amor Ouerfelli

Reputation: 11

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 the beep sound should be gone.

Upvotes: 1

user4266493
user4266493

Reputation:

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

Upvotes: 2

user
user

Reputation: 6947

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.

Upvotes: 5

Related Questions