Form generique [Résolu]

Signaler
Messages postés
28
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
6 juin 2007
-
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
-
bonjour,

je voudrais ouvrir un formulaire avec son nom.
en gros g le nom du formulaire en variable et j'aimerai pouvoir ouvrir une instance de ce formulaire.
j'ai une quarantaine de formulairea lors si c t possible de creer une instance generique ca serait cool.

merci

10 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
Salut,

En utilisant la surcharge
[http://msdn.microsoft.com/library/fre/default.asp?url=/library/fre/cpref/html/frlrfsystemreflectionassemblyclasscreateinstancetopic3.asp Assembly.CreateInstance Method (String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])]
La paramètre args sert à passer les arguments.

/*
coq
MVP Visual C#
*/
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
Salut,

Jette un oeil à Activator.CreateInstance :-)

/*
coq
MVP Visual C#
*/
Messages postés
28
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
6 juin 2007

je suis pas très doué, il n'y aurait pas un exemple concret ??

merci
Messages postés
28
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
6 juin 2007

je sais pas si je me suis bien exprimé:

FrmMachin frm = new FrmMachin(truc);
frm.show();
je voudrais pouvoir mettre en variable le FrmMachin sauf que je pars que du "FrmMachin" en string.
si quelqu'un pouvait m'aider ca serait cool
merci
Messages postés
273
Date d'inscription
dimanche 5 octobre 2003
Statut
Membre
Dernière intervention
6 février 2009
1
utilise : Activator.CreateInstance(string, string, object[])



Exemple :



string strFrmMachin = "FrmMachin";



Activator.CreateInstance(strAssemblyName, strFrmMachin, new object[] {truc});



et si ton FrmMachin se trouve dans le même assembly que celui où t'execute ton code alors :



Activator.CreateInstance(null, strFrmMachin, new object[] {truc});


<hr>ZeBobo5
N'oubliez pas de cloturer votre post.
Messages postés
28
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
6 juin 2007

j'ai trouvé ca et ca marche, le probleme c que ce formulaire à une class en parametre et je sais pas comment lui passer ce parametre.

object j = Assembly.GetExecutingAssembly().CreateInstance(strFrmMachin);
Messages postés
28
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
6 juin 2007

en fait ca j'avais compris, le probleme c qu'il y a pleins d'autres parametres et je ne sais pas ce que s'est et du coup je peux pas lui donner et donc il ne compile pas
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
50
Dans le lien que t'as donné coq, c'est convenablement expliqué


<HR>

<DT>typeName

<DD>Propriété
Type.FullName du type à rechercher.

<DT>ignoreCase

<DD>true pour ignorer la casse du nom de type ; sinon false.

<DT>bindingAttr

<DD>Masque de bits qui affecte la manière dont la recherche est effectuée. La valeur est une combinaison d'indicateurs de bits de
BindingFlags.

<DT>binder

<DD>Objet qui active la liaison, la contrainte de types d'arguments, l'appel des membres et l'extraction d'objets MemberInfo à l'aide de la réflexion. Si binder est une référence null (Nothing dans Visual Basic), le binder par défaut est utilisé.

<DT>args

<DD>Tableau de type Object contenant les arguments à passer au constructeur. Ce tableau d'arguments doit posséder les mêmes nombre, ordre et type que les paramètres du constructeur à appeler. Si vous souhaitez utiliser le constructeur par défaut, args doit être un tableau vide ou une référence null (Nothing dans Visual Basic).

<DT>culture

<DD>Instance de CultureInfo permettant de régir la contrainte des types. Si sa valeur est une référence null (Nothing dans Visual Basic), le CultureInfo du thread en cours est utilisé. (Par exemple, cela est nécessaire pour convertir un String représentant 1000 en une valeur Double, car 1000 est représenté de différentes manières selon la culture.)

<DT>activationAttributes

<DD>Tableau de type Object contenant un ou plusieurs attributs d'activation qui peuvent participer à l'activation. Exemple d'attribut d'activation :

URLAttribute(http://hostname/appname/objectURI)


<HR>

Mx

</DD>
Messages postés
28
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
6 juin 2007

encore merci à tous !!!
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Pour une forme qui attend une chaine de caractères en argument:

Object o = assembly.CreateInstance( "MyNamespace.MyForm", false, BindingFlags.CreateInstance, null, new object[ ] { "Hello World" }, null, null );