Как остановить этот раздражающий динь? - PullRequest
0 голосов
/ 25 апреля 2020

Я знаю, что вопрос задавался и отвечался много раз, но что, если ни один из ответов не сработает? Я использую Visual Studio 2017, чтобы переписать приложение vb6, которое ловит комбинацию клавиш «ctrl + enter» для загрузки диалога. Я отлично улавливаю комбинацию клавиш из текстового поля CourtName, но не могу избавиться от назойливого «дина», который сопровождает ее. Я гуглил много часов, но везде ответ - использовать e.Handled и / или e.SuppressKeyPress, что я и сделал безуспешно. Вот мой код:

Private Sub CourtName_KeyDown(sender As Object, e As KeyEventArgs) Handles CourtName.KeyDown
        If e.KeyCode = Keys.Enter AndAlso e.Control Then
            e.Handled = True
            e.SuppressKeyPress = True
            CourtsBtn.PerformClick()
        End If
End Sub

Динг сохраняется, независимо от того, находятся ли операторы e.Handled и e.SuppressKeyPress до или после оператора PerformClick (). Какие маги c мне не хватает?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

Я только что протестировал этот код, и не было никакого звона, независимо от того, какие модификаторы использовались или нет с Enter:

Public Class Form1

    Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyDown
        If e.KeyCode = Keys.Enter Then
            'Suppress Windows audio feedback.
            e.Handled = True
            e.SuppressKeyPress = True
        End If

        If e.KeyData = (Keys.Control Or Keys.Enter) Then
            Button1.PerformClick()
        End If
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Console.WriteLine("Button1_Click")
    End Sub

End Class

Можете ли вы протестировать тот же код и посмотреть, работает ли он у вас?

0 голосов
/ 25 апреля 2020

Попробуйте заменить следующий код:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    TextBox1.Multiline = True
    MsgBox("Pressed!")
End Sub

Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyDown
    If e.KeyData = Keys.Control + Keys.Enter Then
        TextBox1.Multiline = False
        Button1.PerformClick()
    End If
End Sub

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    TextBox1.Multiline = True
End Sub

Я тестировал этот код на своем, он отлично работает!

100% working code

Наслаждайся этим!

...