代码之家  ›  专栏  ›  技术社区  ›  Caleb Hearth

在VB.NET中从树视图显示窗体

  •  1
  • Caleb Hearth  · 技术社区  · 14 年前

    我试图用一个treeview控件来显示一个特定的窗体,它的节点有自己的 tag 值设置为我需要显示的窗体的实例。我在DoubleClick事件中的代码在我第一次显示窗体时非常有用,但是在那之后我得到了一个对象异常。正如你所看到的,我试图通过重置标签来处理它,但是没有成功。有没有什么方法可以在出现异常并将标记重置为正确的窗体类型时,在不经过switch语句的情况下多次显示窗体?我想要更好看的,像我展示表格的样子。

    Public Class Form1
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim fm2 As New Form2()
            Dim fm3 As New Form3()
            TreeView1.Nodes(0).Tag = fm2
            TreeView1.Nodes(1).Tag = fm3
        End Sub
    
        Private Sub TreeView1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles TreeView1.DoubleClick
            Try
                CType(TreeView1.SelectedNode.Tag, Form).Show()
            Catch odex As ObjectDisposedException
                TreeView1.SelectedNode.Tag = New Form()
                TreeView1_DoubleClick(sender, e)
            Catch nrex As NullReferenceException
                'No node selected, do nothing.  
            End Try
        End Sub
    End Class
    
    2 回复  |  直到 14 年前
        1
  •  1
  •   Mitchel Sellers    14 年前

    这里的问题是,如果用户关闭窗体,对象将被释放。

    1. 您可以切换到“ShowDialog”进程,然后在DoubleClick()方法结束之前重置

    这真的取决于这些表格在做什么。通常我会看到DoubleClick方法执行查找,然后创建实例,这仅仅是因为如果创建实例,您使用的内存可能不需要,但考虑到您的应用程序,这可能是必需的。

    查找示例

    Select Case myTag
        Case 1
            Dim formInstance As New Form1()
            formInstance.Show()
        Case Else
            Dim formInstance As New Form2()
            formInstance.Show()
    End Select
    

    基本上集中它并按需启动表单,如果您想要更多的控制或有很多不同的表单类型,您可以将其切换到另一种设计模式。

        2
  •  1
  •   Giorgi    14 年前

    当用户关闭窗体时,该窗体将被释放。一种方法是处理窗体的关闭事件,只需隐藏它而不是关闭。