2008-12-08 63 views
0

在VB.NET中,我在WinForm表单上有一个Combobox。该表单允许用户键入要查询的查询。当用户点击Enter键时,将对数据库执行查询,并将结果作为DataTable返回。 DataTable随后绑定到Combobox,用户可以选择他们正在查找的选项。Combobox KeyDown事件处理程序多次触发

大多数情况下,这是非常好的。但是,我们发现代码正在执行多次。如果我写出我的查询并按下Enter键,我可以遍历代码两次或三次。如果我不需要,我不想多次将相同的查询发送到数据库。任何想法或建议,为什么代码将执行多次?

这里是有问题的代码。组合框和函数名称已被更改以保护无辜者。 :)

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 2008-12-08 20:51:56

+0

我对表单的keydown事件有同样的问题。感谢您的解决方案! – Jeff 2009-07-27 15:21:42

回答

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 
相关问题