Reflexion : lister les objets d'un type

Résolu
olivgiov Messages postés 11 Date d'inscription samedi 7 octobre 2006 Statut Membre Dernière intervention 2 avril 2007 - 29 mars 2007 à 00:49
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 2 avril 2007 à 18:38
Bonjour,

je fais une methode permettant de creer un menuItem associé à la création d'une fenetre...

public
ToolStripMenuItem CreateMenuItem(
string text,
int numFenetre,
Type typeForm){

Form mafenetre = (
Form)(
Activator.CreateInstance(typeForm));mafenetre.MdiParent =

this;mafenetre.Show();

.....

 

je crée une fenetre en passant le type de mon formulaire en parametre de ma methode
et je crée mon formulaire avec createinstance..

mais j'aimerais par la suite dans le reste de mon programme pouvoir lister tous les objets de type typeForm donc tous les Formulaires de meme type.

Comment faire ?? (j'imagine que je dois utiliser la reflexion).

Merci
Olivier

8 réponses

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
29 mars 2007 à 02:23
Salut, maintient ta propre collection de formes ou quelque chose comme ça..

foreach( Form f in Application.OpenForms )
{
    if ( f.GetType( ) == typeForm )
    {
        // ..
    }
}
3
olivgiov Messages postés 11 Date d'inscription samedi 7 octobre 2006 Statut Membre Dernière intervention 2 avril 2007
29 mars 2007 à 10:32
Merci !!

Bon vu que mon programme utilise des form Mdi ...

j ai retrouvé mes formulaire dans la proprieté MdiChildren , par contre j'ai utilisé
le :  if ( f.GetType( ) == typeForm )  et ca fonctionne parfaitement !
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
29 mars 2007 à 12:09
Ah oui j'avais pas vu que tu utilisais des MDI.
0
olivgiov Messages postés 11 Date d'inscription samedi 7 octobre 2006 Statut Membre Dernière intervention 2 avril 2007
29 mars 2007 à 23:39
Par contre,  en supposant que typeForm ne soit pas un formulaire mais une classe Employe  par exemple, comment est ce que je fais dans ce cas là ??
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
30 mars 2007 à 01:56
Comme la propriété MdiChildren ou OpenForms, tu maintiens les références dans une collection.

List< Employe > employes = new List< Employe >( );
Employe employe = new Employe( );
employes.Add( employe );
0
olivgiov Messages postés 11 Date d'inscription samedi 7 octobre 2006 Statut Membre Dernière intervention 2 avril 2007
30 mars 2007 à 10:41
Ok c'est en effet que je fais actuellement mais je me demandais s'il n'existait une méthode qui pourrait me renvoyer
un tableau des objets instancié d'un type passé en parametre mais je pensais que le reflexion pouvait me donner ce genre de renseignement à un instant t.
0
olivgiov Messages postés 11 Date d'inscription samedi 7 octobre 2006 Statut Membre Dernière intervention 2 avril 2007
2 avril 2007 à 12:47
Est ce que quelqu'un sait si c'est possible de savoir cela ??
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
2 avril 2007 à 18:38
Salut,

A ma connaissance non, et même si c'était faisable les impacts sur les performances seraient sans doute importants.
Mais si tu as vraiment besoin de maintenir une liste des instances crées d'un type particulier, tu peux t'orienter vers un design de ta classe te permettant de le faire, notamment par le passage en privé du/des constructeur(s) et en ne permettant d'obtenir une nouvelle instance de la classe que par une méthode de type "CreateInstance", te permettant ainsi de maintenir une liste des instances crées.
Naturellement n'oublie pas de mettre en oeuvre ce qu'il faut pour retirer les instances de la liste une fois qu'elles doivent être libérées, sinon le GC ne pourra jamais faire son travail, la liste maintenant une référence => voir le modèle Dispose.

/*
coq
MVP Visual C#
CoqBlog
*/
0
Rejoignez-nous