Reflexion : lister les objets d'un type [Résolu]

Signaler
Messages postés
11
Date d'inscription
samedi 7 octobre 2006
Statut
Membre
Dernière intervention
2 avril 2007
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
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

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
39
Salut, maintient ta propre collection de formes ou quelque chose comme ça..

foreach( Form f in Application.OpenForms )
{
    if ( f.GetType( ) == typeForm )
    {
        // ..
    }
}
Messages postés
11
Date d'inscription
samedi 7 octobre 2006
Statut
Membre
Dernière intervention
2 avril 2007

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 !
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
39
Ah oui j'avais pas vu que tu utilisais des MDI.
Messages postés
11
Date d'inscription
samedi 7 octobre 2006
Statut
Membre
Dernière intervention
2 avril 2007

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à ??
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
39
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 );
Messages postés
11
Date d'inscription
samedi 7 octobre 2006
Statut
Membre
Dernière intervention
2 avril 2007

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.
Messages postés
11
Date d'inscription
samedi 7 octobre 2006
Statut
Membre
Dernière intervention
2 avril 2007

Est ce que quelqu'un sait si c'est possible de savoir cela ??
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
93
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
*/