GetExecutingAssembly()。GetType在类库中打开表单

时间:2016-11-07 14:40:38

标签: c# winforms

搜索周围,无法找到解决方案。 使用Reflection,我在同一名称空间中打开了许多表单:

 Type type = Assembly.GetExecutingAssembly().GetType(nameSpace + "." + formName);

现在,我正在尝试在单独的类库中打开一个表单,并且该类型总是返回null。

例如,这总是有效:

 Type type = Assembly.GetExecutingAssembly().GetType("ToolBox" + "." + "localSearch");

但是如果我尝试在类库中打开一个表单,它就会失败。

 Type type = Assembly.GetExecutingAssembly().GetType("CodeConverter.Forms" + "." + "CodeConverter");

以下是类库中的表单:

 namespace CodeConverter.Forms
 {
     public partial class CodeConverter : Form
     { 
         public CodeConverter()
         {
         }
     }
 }

看到整个方法:

    public Form GetFormByName(string nameSpace, string formName)
    {
        object oForm = new object();
        Type type = Assembly.GetExecutingAssembly().GetType(nameSpace + "." + formName);

        //Assembly assembly = Assembly.GetExecutingAssembly();
        //Type type = assembly.GetType(formName);

        Form frm = null;
        if (type != null)
        {
            oForm = Activator.CreateInstance(type);
            frm = (Form)oForm;                
        }

        return frm;
    }

似乎无法找出为什么它不能用于另一个组件中的表单。

编辑:

是否列出了一个小测试和名称空间和表单:

        string test = "";
        foreach (Type t in assembly.GetTypes())
        {
           test += t.FullName + ", ";
        }

编辑2: 找到解决方案:

        Assembly assembly = Assembly.Load(nameSpace);
        Type t = assembly.GetType(nameSpace + "." + formName);

0 个答案:

没有答案