当treenodeclick打开表单时,表单会落后

时间:2016-06-29 15:20:25

标签: c# .net vb.net

这是我在任何网站上的第一篇问题帖子,希望你能帮助我,欢迎我。我正在开发一个vb.net windows应用程序,我在我的主窗体中使用treeview作为软件的菜单。我想通过按Enter或点击treenodes来打开新表格。当我在treenode上按Enter键时,一切正常,但是当我点击主窗体后面打开的treenode新表格时。请帮助我如何在主窗体前面显示新窗体(设置TopMost属性或MDIParent不适合我的应用程序)。 提前致谢

Private Sub TreeView1_NodeMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseClick
     If e.Node.Text = "Purchase" Then
          Dim frm As New frm_purchase
          frm.Show()
     End If
End Sub

Private Sub TreeView1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TreeView1.KeyDown
        If e.KeyData = Keys.Enter Then
            If TreeView1.SelectedNode.Text = "Purchase" Then
                Dim frm As New frm_purchase
                frm.Show()
            End If
        End If
End Sub 

2 个答案:

答案 0 :(得分:1)

.Show()方法has one overload表示表单的所有者。尝试使用此而不是默认值:

Private Sub TreeView1_NodeMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseClick
 If e.Node.Text = "Purchase" Then
      Dim frm As New frm_purchase
      frm.Show(ParentForm)
 End If
在这种情况下,

ParentForm指的是您的MDI容器。

  

您可以使用此方法显示非模态表单。当你使用它   方法,表单的Owner属性设置为owner。非模态的   表单可以使用Owner属性来获取有关拥有的信息   形成。调用此方法与设置Owner属性相同   非模态然后调用Show()方法。

答案 1 :(得分:0)

试试这个:

Private Sub TreeView1_NodeMouseClick(sender As Object, e As TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseClick
    Dim frm As New frm_purchase
    frm.Show()
End Sub

Private Sub frm_purchase_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
    Me.TopMost = False
End Sub

Private Sub frm_purchase_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Me.TopMost = True
End Sub

此解决方案将使您的表单在首次创建时显示在顶部,但如果这是您想要的行为,则不会始终与之前的表单重叠。否则只需将新表单的所有者设置为当前表单就足够了(根据Hanlet的回答)