Form generique

Résolu
zncpo Messages postés 28 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 6 juin 2007 - 15 nov. 2005 à 18:04
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 18 nov. 2005 à 15:52
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

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
18 nov. 2005 à 14:52
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#
*/
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
15 nov. 2005 à 18:21
Salut,

Jette un oeil à Activator.CreateInstance :-)

/*
coq
MVP Visual C#
*/
zncpo Messages postés 28 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 6 juin 2007
16 nov. 2005 à 11:14
je suis pas très doué, il n'y aurait pas un exemple concret ??

merci
zncpo Messages postés 28 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 6 juin 2007
16 nov. 2005 à 14:36
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

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

Posez votre question
zebobo5 Messages postés 273 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 6 février 2009 1
16 nov. 2005 à 15:04
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.
zncpo Messages postés 28 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 6 juin 2007
18 nov. 2005 à 14:45
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);
zncpo Messages postés 28 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 6 juin 2007
18 nov. 2005 à 15:12
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
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
18 nov. 2005 à 15:28
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>
zncpo Messages postés 28 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 6 juin 2007
18 nov. 2005 à 15:50
encore merci à tous !!!
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
18 nov. 2005 à 15:52
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 );
Rejoignez-nous