2010-02-16 3 views
2

J'ai une vue TreeView qui contient des nœuds. Lorsqu'un utilisateur clique sur un nœud, le document CrystalReport correspondant doit être créé et affiché. Par exemple, les noms de mes nœuds sont: "PeriodReport1", "PeriodReport2", "PeriodReport3". Mes documents CrystalReport portent le même nom: "PeriodReport1", "PeriodReport2", "PeriodReport3".Créer un objet dont le type est dans un paramètre de chaîne

Comment puis-je créer et afficher le bon type de document de rapports en cristal? Je pourrais faire quelque chose comme ceci:

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

Mais probablement il y a une meilleure façon de le faire. Puis-je utiliser la réflexion pour le faire?

+0

double: http://stackoverflow.com/questions/2247598/c-instantiate-class-from-string –

Répondre

6

Tant que les rapports ont un constructeur de paramaterless par défaut, à savoir que vous pouvez dire nouveau PeriodReport ...

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

@anonymous downvoter. Hein? –

2

Quelque chose comme ceci:

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

Vous pouvez également cacher un objet de tout tapez la propriété tag de TreeNode, ce qui est souvent utile pour ce genre de chose. Ce n'est pas très MVC, mais peut être un bon ajustement si vous n'essayez pas de séparer les modèles et les vues (ce que WinForms ne vous encourage pas à faire)

0

Qu'en est-il du casting? Comment lancer une instance 'Object'? Quelque chose comme

string myCustomClassName = getMyCustomClassName(); 
var myCustomInstance = (???????)myGenericObject; //What do I replace ?????? with? 
Questions connexes