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

用System.type声明条件类型的对象

  •  2
  • Caleb Hearth  · 技术社区  · 15 年前

    我正在尝试启动一个特定的表单,具体取决于双击事件上树视图的选定节点。启动窗体所需的代码有点庞大,因为在启动新实例之前,我必须确保窗体未被释放,并且窗体尚未打开。我希望所有这些检查都发生在函数末尾的一个地方,这意味着我必须能够将正确的表单类型传递给最后的代码。我试着用一个系统来做这个。键入,但似乎不起作用。有人能给我指一下正确的方向吗?

        With TreeView.SelectedNode
            Dim formType As Type
            Select Case .Text
                Case "Email to VPs"
                    formType = EmailForm.GetType()
                Case "Revise Replacers"
                    formType = DedicatedReplacerForm.GetType()
                Case "Start Email"
                    formType = EmailForm.GetType()
            End Select
            Dim form As formType
             Dim form As formType
            Try
                form = CType(.Tag, formType)
                If Not form.IsDisposed Then
                    form.Activate()
                    Exit Sub
                End If
            Catch ex As NullReferenceException
                'This will error out the first time it is run as the form has not yet 
                ' been defined.
            End Try
            form = New formType
            form.MdiParent = Me
            .Tag = form
            CType(TreeView.SelectedNode.Tag, Form).Show()
        End With
    
    1 回复  |  直到 15 年前
        1
  •  1
  •   Stefan Steinegger    15 年前

    你不能 new 一种类型。类型是运行时类型信息, 新的 需要在编译时知道类型。

    对不起,我不懂VB,我不能给你一个VB的代码示例。

    T CreateForm<T>() where T : Form, new()
    {
      return new T();
    }
    

    Form CreateForm(Type t)
    {
      return (Form)Activator.CreateInstance(t);
    }