搜索周围,无法找到解决方案。 使用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);