Отключить звуковой сигнал клавиши ввода и выхода с #

Я хочу отключить звуковой сигнал, который я получаю, когда нажимаю 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);
            }
    }

person user1788654    schedule 19.12.2012    source источник


Ответы (7)


Вы должны предотвратить создание события 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;
        }
person Hans Passant    schedule 19.12.2012
comment
А если бы там было что-то вроде этого: MessageBox.Show (все еще пищит!); перед Родителем. [...]? После этого звуковой сигнал все равно будет звучать. - person Paweł Poręba; 16.09.2015
comment
Это неизбежно, окно сообщения отправляет событие KeyPressed, прежде чем вы сможете его отменить. Не используйте MessageBox и не показывайте его с задержкой с помощью this.BeginInvoke (). - person Hans Passant; 16.09.2015

Если вы хотите предотвратить всплытие события в Winforms или WPF / Silverlight, вам необходимо установить e.Handled в true из обработчика событий.

Делайте это только в том случае, если вы действительно обработали событие к своему удовлетворению и не хотите дальнейшей обработки данного события.

person user    schedule 19.12.2012

это работает для меня.

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;
}
person Community    schedule 03.07.2015

Запуск 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, но он там не нужен.

person Ted Roth    schedule 21.07.2018

Просто установите для свойства Form KeyPreview значение true, затем добавьте следующий код в событие Form KeyPress;

если (e.KeyChar == (char) Keys.Return)

 e.Handled = true;

тогда до свидания !!!

person Amor Ouerfelli    schedule 12.04.2019

После долгих поисков я обнаружил, что вы должны установить для значения KeyPreview в форме, содержащей ваши элементы управления, значение True (в разделе «Свойства формы»), затем использовать событие KeyDown для проверки нажатия клавиши, и, если оно обнаружено, назначьте True для обоих событий e. Свойства Handled и SuppressKeys объекта args.

Ниже приведен код 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
person Chris Raisin    schedule 14.07.2021

person    schedule
comment
Этот вопрос был задан 3 года назад и отмечен как принятый. Ваш ответ ничего нового не добавляет. - person Takarii; 08.08.2016