Обработчик события Combobox KeyDown срабатывает несколько раз - PullRequest
0 голосов
/ 08 декабря 2008

В VB.NET у меня есть Combobox на форме WinForm. Форма позволяет пользователю вводить запрос для поиска. Когда пользователь нажимает клавишу Enter, к базе данных выполняется запрос, и результаты возвращаются в виде таблицы данных. Затем DataTable привязывается к Combobox, и пользователь может выбрать опцию, которую он ищет.

По большей части это работает отлично. Однако мы обнаружили, что код выполняется несколько раз. Если я напишу свой запрос и нажму клавишу ВВОД ОДИН РАЗ, я могу пройти по коду ДВА или ТРИ раза. Я не хочу отправлять один и тот же запрос в базу данных несколько раз, если мне это не нужно. Любые идеи или предложения, почему код будет выполняться несколько раз?

Вот код, о котором идет речь. Названия Combobox и Function были изменены, чтобы защитить невинных. :)

Private Sub cbx_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles cbx.KeyDown

    Me.Cursor = Cursors.IBeam
    If e.KeyData = Keys.Enter Then
        Me.Cursor = Cursors.WaitCursor
        PerformSearch()
        Me.Cursor = Cursors.Default
    End If
    Me.Cursor = Cursors.Default

End Sub

1 Ответ

1 голос
/ 09 декабря 2008

По иронии судьбы, добавление cbx.Focus () после выполнения поиска решило проблему. Вот решение.

Private Sub cbx_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles cbx.KeyDown

    Me.Cursor = Cursors.IBeam
    If e.KeyData = Keys.Enter Then
        Me.Cursor = Cursors.WaitCursor
        PerformSearch()
        cbx.Focus()
        Me.Cursor = Cursors.Default
    End If
    Me.Cursor = Cursors.Default

End Sub
...