在c#中使用string动态打开现有表单
本文关键字:表单 动态 string | 更新日期: 2023-09-27 18:08:41
我正在尝试打开动态附加在菜单栏中的表单。
我的代码是:
形式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
值。
您混淆了程序集名称(Assembly.GetEntryAssembly().GetName().Name
)和名称空间。
您需要找到表单的真正的完全限定类名。如果您知道名称空间(即所有表单的名称空间总是相同的),您可以简单地硬编码它。另一种解决方案是使用反射枚举GetEntryAssembly
程序集中的所有类型,然后检查该类型是否代表具有给定名称的表单。
如果您不知道完全限定名,您可以迭代程序集中的类型并找到您感兴趣的类型。
var q = from t in Assembly.GetExecutingAssembly().GetTypes()
where t.IsClass && t.Name.Equals(formname) && t.IsSubclassOf(typeof(Form))
select t;