按下按钮上的Enter键会导致上一个表单处理输入键

时间:2014-01-28 16:52:54

标签: vb.net forms button

我有一个包含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

1 个答案:

答案 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