使用c#中的字符串动态打开现有表单

时间:2013-04-12 07:32:49

标签: 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.Show();

这里的问题是。我正在为该类型提供null值。请帮我完成这项任务。

2 个答案:

答案 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;