2012-05-10 84 views
0

我在我的應用程序中顯示綁定到BindingSource的DataGrid的窗體。當我雙擊一行時,我會顯示一個詳細表單。實例化一個未知類型的傳入窗體

我幾乎有50個這些「瀏覽」表單及其附帶的詳細表單。我想通過創建基本瀏覽表單並將適當的BindingSource傳遞給它來減少表單(和代碼)的數量。我有這個工作。但是,當我雙擊一行時,我想實例化與傳遞的BindingSource相關的詳細表單。

例如,如果用戶瀏覽Customer表格,則將打開Customer Detail表格,但是如果他瀏覽Job表格,則將打開Job Detail表格。

我可以傳遞一個通用的詳細信息表單作爲參數,但我該如何將通過的表單轉換爲正確的類型之一,以便我可以實例化它?

(我試圖避免大的switch語句,通過循環來選擇正確的傳遞形式。當然還有一個更優雅的方式來實現這一目標?)

[編輯] 我的瀏覽形式的代碼實例化因此:

public BaseBrowse(BindingSource dataClass, DevExpress.XtraEditors.XtraForm crudForm) 
    { 
     InitializeComponent(); 
     bs = dataClass; 
     crud = ((CRUDEquipment)(crudForm)); 
    } 

我雙擊事件是這樣的:

private void gvw_DoubleClick(object sender, EventArgs e) 
    { 
     Int32 nID = Convert.ToInt32(gvw.GetFocusedRowCellValue("ID")); 
     ((CRUDEquipment)(crud)).intID = nID; 
     ((CRUDEquipment)(crud)).Show();     
    } 

我需要一種方法來取代「CRUDEquipment」與我的東東任何形式d。

+0

所以你形成配置對象需要*兩個*成員,BindingSource的和詳表型。 –

+0

我實際上是通過BindingSource和表單的副本。 – Chimesy

回答

0

也許這些人會幫



public void Instantiate<T>() 
{ 
    var myObject = Activator.CreateInstance<T>(); 
    // Do something with myObject 
} 

public void Instantiate(Type t) 
{ 
    var myObject = Activator.CreateInstance(t); 
    // Do something with myObject 
} 

public void Instantiate(string typeName) 
{ 
    var detailType = Type.GetType(typeName); 

    if (detailType == null) 
    { 
     throw new InvalidOperationException("Nice try, but type {0} doesn't compute :)"); 
    } 

    var myObject = Activator.CreateInstance(detailType); 
    // Do something with myObject 
} 

+0

我在哪裏放這個代碼? – Chimesy