Csharp/C#教程:从动态加载的DLL中显示表单分享


从动态加载的DLL中显示表单

这是我之前在这里提出的问题的扩展。

简而言之,我使用以下代码动态加载DLL并使用它来创建type

 Assembly assembly = Assembly.LoadFile("C:\test.dll"); Type type = assembly.GetType("test.dllTest"); Activator.CreateInstance(type); 

从那里我可以使用type来引用dllTest类中的几乎任何东西。 默认情况下,该类在运行时应该显示一个表单(在这种情况下,相当空白,因此它并不复杂)。

我觉得我在这里错过了一个关键的代码行,这样可以防止表单在屏幕上加载。

dllTest.cs (在DLL中)包括:

 namespace test { public partial class dllTest : Form { public dllTest() { InitializeComponent(); } } } 

InitializeComponent()设置表单的布局,这个太长了,无法在此处粘贴,不应该有所作为。

有任何想法吗?

您必须对刚刚创建的表单执行某些操作:

 Assembly assembly = Assembly.LoadFile("C:\test.dll"); Type type = assembly.GetType("test.dllTest"); Form form = (Form)Activator.CreateInstance(type); form.ShowDialog(); // Or Application.Run(form) 

是的,您实际上并未指定在类初始化程序之外运行的任何代码。 例如,对于表单,您必须实际显示它们。

您可以将代码修改为以下内容……

 Assembly assembly = Assembly.LoadFile("C:\test.dll"); Type type = assembly.GetType("test.dllTest"); Form form = Activator.CreateInstance(type) as Form; form.ShowDialog(); 

如果类属于FormAssembly.GetType()返回NULL 。 如果一个类属于User Control那么我可以看到返回的类型。

语法也应如下:

 Type type = assembly.GetType("Assemblytest.clsTest"); 

哪里

我会选择:

 Assembly assembly = Assembly.LoadFile("C:\test.dll"); Type type = assembly.GetType("test.dllTest"); object obj = Activator.CreateInstance(type); Form form = obj as Form; if (form != null) form.Show(); //or ShowDilaog() whichever is needed 

应添加其他错误检查/处理; 但至少我会确保转换工作。

上述就是C#学习教程:从动态加载的DLL中显示表单分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/954076.html

(0)
上一篇 2021年11月20日
下一篇 2021年11月20日

精彩推荐