Parametres entre fenetre mere / fille

Signaler
Messages postés
277
Date d'inscription
lundi 9 février 2004
Statut
Membre
Dernière intervention
4 mai 2008
-
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
-
Bonjour à tous,


J'ai deux fenetres l'une est mere (fenetre 1) et contient la seconde (fenetre 2)

dans la fenetre 1 j'ai un parametre param01

dans la fenetre 2 j'ai un textbox et un bouton


Lorsque je clique sur le bouton de la fenetre 2 le texte que j'ai entré
dans le textbox soit mis dans param01  afin de l'utiliser plus
tard dans la fenetre 1


J'ai bien pensé à utiliser la passage de parametres par reference en
declarant un parametre dans le constructeur de la fenetre 2 avec "out"
( out string monparam)  mais il semble que le parametre doit 
etre modifié seulement dans le constructeur de la fenetre 2.

Comment pourrai je faire pour pouvoir modifier param01 dans la fenetre
2.. Suis je obligé de creer une instance de la fenetre 1 dans la
fenetre 2 ?

duck88

11 réponses

Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
54
Salut,
Tu peux jeter un oeil sur cette source qui parle du passage de paramètres.

VC# forever
=13319
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
le plus simple est de lever un evenement au click sur le bouton...grosso modo, le code serait :

en gros ce qu'il faut faire  :


créer une classe dérivée de EventArgs (dans lexemple elle sappelle
MaClasseEventArgs) qui contienne une donnée membre de type string.

créer dans le fichier de cette classe (mais pas dans la classe ) le délégué suivant :

public delegate void MonEventEnvoiDeTexteHandler (object sender, MaClasseEventArgs e);


au click sur ton bouton dans ta form fille, tu insere le code suivant :

if (MonEventEnvoiDeTexteHandler != null)

{

    MonEventEnvoiDeTexteHandler(this, new MaClasseEventArgs(textbox1.text));

}


dans ta forme mere, dans le constructeur :

MonEventEnvoiDeTexteHandler += new MonEventEnvoiDeTexteHandler(FonctionStockageMaVar);


private void FonctionStockageMaVar ( object sender, MaClasseEventArgs e)

{

    this.MaVarAStocker =  e.MonChampTexte;

}


bon evidemment ce code est assez grossier mais ca tindique deja ou
chercher et comment coder (plus ou moins) ce que tu recherche. jespere
juste que cest suffisement clair ici (et que le code est juste et que
jai rien oublié, netant pas en train de coder une appli mais juste un
bout de code un peu abstrait je peux avoir oublié un pti détail ^^).
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
petite correction a ce que jai mis au dessus :


if (MonEventEnvoiDeTexte != null)

{

    MonEventEnvoiDeTexte(this, new MaClasseEventArgs(textbox1.text));

}


dans ta forme mere, dans le constructeur :

MonEventEnvoiDeTexte += new MonEventEnvoiDeTexteHandler(FonctionStockageMaVar);


et dans la forme fille, ne pas oublier de déclarer l'event MonEventEnvoiDeTexte (

public event MonEventEnvoiDeTexteHandler MonEventEnvoiDeTexte)


tapé tout ca un peu trop vite tout a lheure, apres metre relu me suis
rendu compte. j'espere pas tavoir embrouillé avec ma correction. si tas
besoin dexplication plus claires hesite pas je detaillerais tout ca (en
bref si tu connais mal les event vu que le code nest pas franchement
compliqué ^^)
Messages postés
277
Date d'inscription
lundi 9 février 2004
Statut
Membre
Dernière intervention
4 mai 2008

Merci pour ton code, non tu ne ma pas embrouillé je viens d'avoir tes
reponses. Je vais etudié ca et si j'ai un soucis je te demande

duck88
Messages postés
277
Date d'inscription
lundi 9 février 2004
Statut
Membre
Dernière intervention
4 mai 2008

On m'avais dis que les pointeurs n'exitaient pas en
C# mais sur la msdn 2005 j'ai l'explication de l'utilisation de ceux-ci
en C# ne serai ce pas judicieux d'utiliser ceci plutot que les events ?



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

Pour utiliser les pointeurs tu dois passer dans un contexte unsafe, et il vaut mieux réserver ce genre de recours pour des questions de performance. La solution des events est meilleure.
Tu pourrais aussi dire de passer par un classe "conteneur de données" dont tu passes une instance au constructeur de ton formulaire en stockant cette référence en tant que membre dudit formulaire afin de pouvoir compléter les valeurs durant le traitement.

/*
coq
MVP Visual C#
*/
Messages postés
277
Date d'inscription
lundi 9 février 2004
Statut
Membre
Dernière intervention
4 mai 2008

Salut coq !!!

Ta solution de classe "conteneur de données" me plais bien, aurait une source qui l'utilise afin de pouvoir me baser dessus.

duck88
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
public class Conteneur

{

    private string m_Valeur;

    public Conteneur(p_Valeur)

    {

       p_Valeur=m_Valeur;

    }


    public string valeur

    {

       get

       {

          return m_Valeur;

        }

    }

}


public class FormFille

{

    private Conteneur c;

    public FormFille(ref Conteneur c2)

    {

       c=c2;

    }


    private ButtonClicked (object sender, EventArgs e)

    {

       c.Valeur = textbox1.text

    }

}


public class FormMere

{

    Conteneur c;

    public FormMere()

    {

       new FormFille(ref c);

    }

}


ca doit marcher comme ca.....jai ptetre fait une ou deux erreur de
codes, jai jamais codé comme ca et jai tjs utlisé les events, mais a
priori cest ca ;)
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
87
Oui c'est à peu prêt ça, mis à part la propriété en readonly et le fait que le passage avec le mot clé ref n'est pas vraiment nécessaire, "Conteneur" étant une classe et donc un type référence.

Bref, c'est ce que fait bidou avec son formulaire d'ajout de client dans sa source citée plus haut :-)

/*
coq
MVP Visual C#
*/
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
54
Finalement, la première réponse du topic sera la bonne

VC# forever
=13319
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
voui cest vrai que le ref sert a rien ;)


euh voui cest vrai que jai oublié le set sur la propriété ;) (sur valeur dans la classe conteneur ^^).


enfin 3 lignes ds un post sont parfois plus parlante qu'un source meme
bien commenté quand on cherche a bien comprendre qqs ptis trucs ;)

au moins ya que les qqs notions a comprendre, et pas pleins de fichiers a assimiler et des données "parasites au sujet".


en esperant que tout ca t'aide ;)