Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c中使用字符串动态打开现有表单#_C# - Fatal编程技术网

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

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);

我试图打开动态附加在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
值。请帮助我完成此任务。

您将程序集名称(
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
),那么您的代码将正常工作我将建议一个接口或委托实现。