我使用lnk.name = ItemCard
创建了一个链接标签我有一个名为frmItemCard的表单
当您点击链接标签时,我希望它以编程方式打开表单。
我这样做是因为我正在从SQL表中的列表生成链接标签。
我用来打开表单的代码是:
Private Sub lnk_LinkClicked(ByVal sender As System.Object, ByVal e As LinkLabelLinkClickedEventArgs)
Dim lnk As LinkLabel = CType(sender, LinkLabel)
Try
Dim vForm As String
vForm = "frm" + lnk.Name
Call showFormDynamically(vForm)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Public Sub showFormDynamically(frmForm As String)
Dim obj As Object = Activator.CreateInstance(Type.GetType(frmForm))
obj.MdiParent = ParentForm
obj.Dock = DockStyle.Fill
obj.show()
End Sub
我得到的错误是:值不能为空。参数名称:type
任何想法我做错了什么?
答案 0 :(得分:2)
问题是,Type.GetType()
如果根本无法解析类型,则会返回null
。
所以你没有类型来创建实例,现在如果你调用Activator.CreateInstance(null)
抛出异常,因为该方法不允许传入的参数为null
。
这完全与VB.NET无关,这就是.NET框架的运作方式。无论如何,请尝试:致电Type.GetType("anything")
,它只会返回null
。
所以我说你的类型名称是错的。您似乎只使用"frmItemCard"
之类的内容,但是您需要传递完全合格的内容,可能看起来像"AnyApplication.AnyNamespace.frmItemCard"
。
有多种方法可以找到您的类型名称。你可以从这里开始: