2012-08-23 52 views
2

我需要一种通过表单名称返回表单的新实例的方法。以下是我迄今为止:Winforms,通过表单名称获取表单实例

public Form GetFormByName(string frmname) 
    { 
     return Assembly.GetExecutingAssembly().GetTypes().Where(a => a.BaseType == typeof(Form) && 
      a.Name == frmname).Cast<Form>().FirstOrDefault(); 
    } 

不过,我得到以下错误,当我试图执行此代码:

无法转换类型“System.RuntimeType”的对象键入“系统。 Windows.Forms.Form”。

这个错误是什么意思?

回答

8

您需要Activator.CreateInstance方法,它会创建一个给定类型的实例Type

public Form TryGetFormByName(string frmname) 
{ 
    var formType = Assembly.GetExecutingAssembly().GetTypes() 
     .Where(a => a.BaseType == typeof(Form) && a.Name == frmname) 
     .FirstOrDefault(); 

    if (formType == null) // If there is no form with the given frmname 
     return null; 

    return (Form)Activator.CreateInstance(formType); 
} 
+0

IMO,您应该命名为'TryGetFormByName',或者抛出一个异常,如果没有找到该类型。 (无论如何+1) – hvd

+0

@nemesv - 良好的通话。谢谢! – Coltech

0
Assembly asm = typeof(EnterHereTypeInTheSameAssembly).Assembly; 
Type type = asm.GetType(name); 
Form form = (Form)Activator.CreateInstance(type);