2008-12-08 3 views
0

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

По большей части, это отлично работает. Однако мы обнаружили, что код выполняется несколько раз. Если я напишу свой запрос и нажму клавишу Enter, я могу пройти через код TWO или THREE раз. Я не хочу отправлять один и тот же запрос в базу данных несколько раз, если мне это не нужно. Любые идеи или предложения, почему код будет выполняться несколько раз?

Вот код, о котором идет речь. Названия 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 
+0

У вас нет другого обработчика событий, определенного где-то еще? Что-то вроде AddHandler cbx.KeyDown, AddressOf Me.cbx_KeyDown – JamesSugrue

+0

У меня была такая же проблема с событием keydown для формы. Спасибо за решение! – Jeff

+0

За исключением того, что это событие формы, фокусное решение не работает. :-( – Jeff

ответ

1

По иронии судьбы, добавление 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 
+0

Трудно поверить. Он не может получить событие KeyDown, если он не имеет фокуса. Следите за тем, чтобы не набирать клавиши, такие как Shift, Control, Alt. –

Смежные вопросы