在我的visual studio 2010的winforms应用程序中,
我有一个按钮和两个组合框(combobox1
,combobox2
)。
我在按钮中添加了代码以清除先前在第一个组合框(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
更新
当我点击按钮时,问题不会出现 但是当我按下按钮时按下回车键,触发按钮点击事件时,会出现问题。
答案 0 :(得分:2)
解决此问题的最简单方法是将ComboBox1更改为KeyDown处理程序,而不是键入。
它发生的原因是事件的顺序:
Button2_Click
),焦点移至ComboBox1 ComboFox1_KeyUp
),焦点移至ComboBox2 修改强>
一个更罗嗦的解释:你按下button1
上的回车键,这会导致它的OnKeyDown处理程序运行。当您释放回车键时,焦点位于Combobox1
,因此它的OnKeyUp处理程序运行。