2010-02-16 71 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? 
相关问题