Keyup事件自动触发

时间:2013-02-23 11:56:32

标签: vb.net winforms combobox

在我的visual studio 2010的winforms应用程序中,

我有一个按钮和两个组合框(combobox1combobox2)。

我在按钮中添加了代码以清除先前在第一个组合框(combobox1)中输入的数据,并将焦点设置为它。

在第一个组合框(combobox1)的键盘事件中,我检查了输入键,如果按下,焦点将移动到下一个组合框(combobox2)。

但我的问题是,当我按下按钮时(通过在按下按钮时按Enter键),焦点会直接移动到最后(第二个)组合框(combobox2)。

虽然我只输入了按钮

,但是自动触发了combobox1的键盘事件

我该如何解决这个问题?

我的代码在下面给出

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    'code to perform database action
    Me.ComboBox1.Focus()
End Sub

Private Sub ComboBox1_KeyUp(sender As Object, e As KeyEventArgs) Handles ComboBox1.KeyUp
    If e.KeyCode = Keys.Enter Then
        If Me.ComboBox1.SelectedText = String.Empty Then
            ComboBox2.Focus()
        End If
    End If
End Sub

更新

当我点击按钮时,问题不会出现 但是当我按下按钮时按下回车键,触发按钮点击事件时,会出现问题。

1 个答案:

答案 0 :(得分:2)

解决此问题的最简单方法是将ComboBox1更改为KeyDown处理程序,而不是键入。

它发生的原因是事件的顺序:

  • 按下按钮(输入键)
  • 代码运行(Button2_Click),焦点移至ComboBox1
  • 键盘上的ComboBox1触发
  • 代码运行(ComboFox1_KeyUp),焦点移至ComboBox2

修改 一个更罗嗦的解释:你按下button1上的回车键,这会导致它的OnKeyDown处理程序运行。当您释放回车键时,焦点位于Combobox1,因此它的OnKeyUp处理程序运行。