后期绑定时如何初始化用户控件子控件
How to initialize user control sub controls when late binding
我有一个 usercontrol,上面有一个 webbrowser 控件,编译成它自己的程序集。在将其分解为自己的程序集之前,此控件在我的项目中有效。
现在这样做的目的是后期绑定到程序集,实例化控件,并将其添加到我的窗体上的选项卡控件中。
Dim objAssembly As Reflection.Assembly
objAssembly = Reflection.Assembly.LoadFrom(My.Application.Info.DirectoryPath + "\ppbb.dll")
Me._SelectionDetail1 = objAssembly.CreateInstance("ppbb.SelectionDetail")
当我单步执行这段代码时,它似乎创建了对象,但是当我尝试将一些 html 设置到用户控件上的 webbrowser 控件时,它 nullrefs。
我需要在用户控件上调用初始化程序吗?
我可以延迟绑定用户控件吗?
感谢您的帮助,
蒂姆
当您收到 NullReferenceException 时,这可能意味着 objAssembly.CreateInstance
返回了 Nothing
,因为它找不到您请求的类型(使用调试器检查)。
确保您指定的类型名称正确。如果您的控件 MyControl
位于命名空间 MyLib
内的模块 Test
内(为了举例,只是一些随机名称),您必须使用 objAssembly.CreateInstance("MyLib.Test+MyControl")
.
如有疑问,只需使用调试器检查 objAssembly.GetTypes()
以获取该程序集中所有类型的列表,查找控件的 Type
,然后检查 FullName
属性 个 Type
。
这是您必须使用的字符串,因此 CreateInstance
会找到 Type
。
我有一个 usercontrol,上面有一个 webbrowser 控件,编译成它自己的程序集。在将其分解为自己的程序集之前,此控件在我的项目中有效。
现在这样做的目的是后期绑定到程序集,实例化控件,并将其添加到我的窗体上的选项卡控件中。
Dim objAssembly As Reflection.Assembly
objAssembly = Reflection.Assembly.LoadFrom(My.Application.Info.DirectoryPath + "\ppbb.dll")
Me._SelectionDetail1 = objAssembly.CreateInstance("ppbb.SelectionDetail")
当我单步执行这段代码时,它似乎创建了对象,但是当我尝试将一些 html 设置到用户控件上的 webbrowser 控件时,它 nullrefs。
我需要在用户控件上调用初始化程序吗? 我可以延迟绑定用户控件吗?
感谢您的帮助, 蒂姆
当您收到 NullReferenceException 时,这可能意味着 objAssembly.CreateInstance
返回了 Nothing
,因为它找不到您请求的类型(使用调试器检查)。
确保您指定的类型名称正确。如果您的控件 MyControl
位于命名空间 MyLib
内的模块 Test
内(为了举例,只是一些随机名称),您必须使用 objAssembly.CreateInstance("MyLib.Test+MyControl")
.
如有疑问,只需使用调试器检查 objAssembly.GetTypes()
以获取该程序集中所有类型的列表,查找控件的 Type
,然后检查 FullName
属性 个 Type
。
这是您必须使用的字符串,因此 CreateInstance
会找到 Type
。