C# 在c中使用字符串动态打开现有表单#
我试图打开动态附加在menustrip中的表单 我的代码是: 表格C# 在c中使用字符串动态打开现有表单#,c#,C#,我试图打开动态附加在menustrip中的表单 我的代码是: 表格frm string formName =((ToolStripMenuItem)sender).Text; formName = Assembly.GetEntryAssembly().GetName().Name + "." + formName; Type type = Type.GetType(formName); frm = (Form)Activator.CreateInstance(type);
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;
您需要确保
formName
是正确的(它必须是完全限定的类型名称,即如果您想要string
您必须通过System.string
),那么您的代码将正常工作我将建议一个接口或委托实现。