从一个动态加载DLL显示形式(Displaying a form from a dynamicall

2019-06-25 04:22发布

这是一个问题我以前问的扩展这里 。

长话短说,我动态加载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()设置的形式,这是远远太长,贴在这里,不应该有所作为的布局。

有任何想法吗?

Answer 1:

你必须做你刚刚创建的形式的东西:

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)


Answer 2:

是的,你实际上并没有指定任何代码的类初始化之外运行。 例如,对于形式你必须真正显示它们。

你可以修改你的代码如下...

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


Answer 3:

如果一个类属于Form ,则Assembly.GetType()返回NULL 。 如果一个类属于User Control ,然后我可以看到,类型返回。

另外,语法应为:

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

哪里

  • clsTest将类的名称(用户控制的)
  • Assemblytest是组装的,而不该.dll extention名称。


Answer 4:

我会去的:

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

其它错误检查/处理应增加; 但是起码我会确保改建工程。



文章来源: Displaying a form from a dynamically loaded DLL
标签: c# dll forms