我有一个包含2个表单的VB.net应用程序。在表单1上是一个组合框,当按下回车键并且组合框具有焦点时,该组合框打开表格2。表单2上没有其他内容。在表单2上,我有一个关闭表单2的按钮,但它没有设置为表单2的接受按钮。表格2上没有其他内容。
以下是表单1的代码:
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
ComboBox1.Items.Add("Test")
End Sub
Private Sub ComboBox1_KeyUp(sender As Object, e As KeyEventArgs) Handles ComboBox1.KeyUp
If e.KeyCode = Keys.Enter Then
Dim theForm As New Form2
theForm.ShowDialog()
theForm.Dispose
End If
End Sub
End Class
以下是表单2的代码:
Public Class Form2
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Button1.Focus()
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Me.Close()
End Sub
End Class
我遇到的问题是,当显示表单2并且按钮具有焦点时,如果按下回车键而不是使用鼠标单击按钮,则表单2不会处理此回车键,而是按钮.click事件被触发。当该事件关闭表单2和表单1恢复时,组合框具有焦点并处理输入键并打开表单2.我想要发生的是当表单2打开并且当按钮具有焦点时按下回车键,我希望输入键由表单2处理,而不是由表单1处理。
我尝试在按钮上创建KeyUp,KeyDown和KeyPressed事件的代码,但没有一个被调用。我还在表单2上将KeyPreview设置为True,然后添加了代码以处理keypressed事件,但事件不会触发表单2.也不会触发表单2的KeyUp或KeyDown。
有什么建议吗?
注意:我所包含的示例代码是为了显示我遇到的问题。除了显示问题之外,它不打算做任何其他事情。我遇到的问题是在一个更复杂的应用程序中,但问题是相同的。
-NCGrimbo
答案 0 :(得分:1)
如果你想要的只是Form1的组合框不会在Form2打开并按下输入时触发,你可以试试这个。只需禁用Form1的组合框,如下所示:
Private Sub ComboBox1_KeyUp(sender As Object, e As KeyEventArgs) Handles ComboBox1.KeyUp
If e.KeyCode = Keys.Enter Then
ComboBox1.Enabled = False
Dim theForm As New Form2
theForm.ShowDialog()
theForm.Dispose
ComboBox1.Enabled = True
End If
End Sub
我使用您所做的代码设置了一个项目,这解决了问题,因此当按下Enter时,Form2不会保持打开状态。 HTH