2012-08-23 51 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);