我正在尝试打开动态附加在menustrip中的表单。
我的代码是:
表格frm
;
string formName =((ToolStripMenuItem)sender).Text;
formName = Assembly.GetEntryAssembly().GetName().Name + "." + formName;
Type type = Type.GetType(formName);
frm = (Form)Activator.CreateInstance(type);
frm.Show();
这里的问题是。我正在为该类型提供null
值。请帮我完成这项任务。
答案 0 :(得分:0)
您正在混合程序集名称(Assembly.GetEntryAssembly().GetName().Name
)和命名空间。
您需要找到表单的真正完全限定类名。如果您知道命名空间(即命名空间对于所有表单始终是相同的),您可以简单地对其进行硬编码。另一种解决方案是使用反射来枚举GetEntryAssembly
程序集中的所有类型,然后检查该类型是否代表具有给定名称的表单。
答案 1 :(得分:0)
如果您不知道完全限定名称,可以迭代装配中的类型并找到您感兴趣的类型。
var q = from t in Assembly.GetExecutingAssembly().GetTypes()
where t.IsClass && t.Name.Equals(formname) && t.IsSubclassOf(typeof(Form))
select t;