2010-02-16 74 views
2

我有一個TreeView,它包含節點。當用戶點擊節點時,應創建並顯示相應的CrystalReport文檔。創建一個類型在字符串參數中的對象

例如,我的節點名稱爲:「PeriodReport1」,「PeriodReport2」,「PeriodReport3」。我的CrystalReport文檔名稱相同:「PeriodReport1」,「PeriodReport2」,「PeriodReport3」。

如何創建並顯示正確類型的水晶報表文檔?我可以這樣做:

select case reportName 
    case "PeriodReport1" 
     dim myReport as new PeriodReport1 
    case "PeriodReport2" 
     dim myReport as new PeriodReport2 
    ... 
end select 

但可能有更好的方法來做到這一點。我可以使用反射來做到這一點嗎?

+0

重複:http://stackoverflow.com/questions/2247598/c-instantiate-class-from-string – 2010-02-16 12:12:51

回答

6

只要報告有一個默認的構造函數paramaterless,即你可以說新PeriodReport ...

Activator.CreateInstance(Type.GetType("namespace.typename")) 
+0

@anonymous downvoter。是吧? – 2010-02-18 01:51:34

2

事情是這樣的:

Type t = Type.GetType("object type name"); 
TBaseObj new_obj = (TBaseObj) Activator.CreateInstance(t); 
2

您也可以藏匿的任何對象鍵入TreeNode的tag屬性,這對於這類事情通常很有用。它不是很MVC,但是如果你不是已經試圖保持模型和視圖是分開的(WinForms不鼓勵你這樣做),那麼它可以是一個很好的選擇。

0

鑄件怎麼樣?如何投射「對象」實例?喜歡的東西

string myCustomClassName = getMyCustomClassName(); 
var myCustomInstance = (???????)myGenericObject; //What do I replace ?????? with? 
相關問題