Passer valeur de la form 1 à la form 2 puis à la form 3

Résolu
ericdu93 Messages postés 56 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 28 août 2008 - 17 mars 2008 à 17:38
taupe4 Messages postés 91 Date d'inscription dimanche 16 avril 2006 Statut Membre Dernière intervention 17 avril 2008 - 17 avril 2008 à 00:39
Bonjour,

je débute en orienté objet.

Donc voilà, mon application est composé de trois form dans lequel l'utilisateur finale va remplir chacune de ces forms.

Dans ma form1, j'instancie la form2 en passant l'instance de la form1 pour récupérer un attribut de la form1 dans ma form2.
Ci-dessous le code pour montrer ca:

Form1 f1:

            _f2 = new formChoixTable(this);
            _f2.Show();

Question 1: dans ma form 2, je vais juste récupérer 1 seulattribut de ma form1, donc est-ce qu'il vaut mieux que j'utilise une classe statique ? Dans ce cas là, dans ma form1, je stocke la valeur dans cette class statique que je récupére dans form2 ce qui amène à stocker les valeurs de form2 également dans cette classes statiques pour les utiliser dans form3
J'ai lu la documentation msdn sur les classes statiques (http://msdn2.microsoft.com/en-us/library/79b3xss3(VS.80).aspx)  et il est dit: je cite:
Use a static class to contain methods that are not associated with a
particular object. For example, it is a common requirement to create a
set of methods that do not act on instance data and are not associated
to a specific object in your code. You could use a static class to hold
those methods.
Question 2: je ne comprends pas, pour moi une méthode est toujours associé à un objet alors dans quel cas on considère qu'une méthode ne l'ait pas ? Je dois avouer que même en regardant les exemples de la page, je ne vois pas la différence.

Merci d'avance.

9 réponses

taupe4 Messages postés 91 Date d'inscription dimanche 16 avril 2006 Statut Membre Dernière intervention 17 avril 2008 1
18 mars 2008 à 12:21
Ce qui est mentionné sur MSDN, c'est que les classes statiques sont utilisés pour des variables ayant une portée globale et qu'elle n'affectent pas l'état d'un objet. Par exemple, une méthode qui créerait un tableau de données à partir d'un fichier. Cette méthode n'a pas besoin d'être dans un objet instancié, car elle ne dépend pas de l'objet. Par contre, le contenu d'un champ de texte, lui, est directement relié à l'objet, car il change selon l'état dudit objet. Si on aurait le contenu d'un champ de texte en statique, tous les champs de texte créé auraient le même texte.

En gros, static = 1 seule valeur dans tous les cas
variable d'instance = autant de valeurs que d'objets créés.

Mais je ne vois pas pourquoi l'autre méthode ne te convenait pas. Si tu veux, tu peux uniquement envoyer ledit paramètre dans ton constructeur de Form2. Par exemple:
public Form2(string nom)
{
}
Form2 form2 = new Form2(this.textBox1.Text);
3
taupe4 Messages postés 91 Date d'inscription dimanche 16 avril 2006 Statut Membre Dernière intervention 17 avril 2008 1
18 mars 2008 à 21:06
Dans la Form3, tu envoies un paramètre de type Form1 et un autre de type Form2.
3
taupe4 Messages postés 91 Date d'inscription dimanche 16 avril 2006 Statut Membre Dernière intervention 17 avril 2008 1
18 mars 2008 à 23:39
public Form3(Form1 etape1, Form2 etape2)
{

}

Dans form2 tu renvoies à Form3 la form1 que tu avais précédemment obtenue, en plus de this.
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
19 mars 2008 à 00:26
3

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

Posez votre question
ericdu93 Messages postés 56 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 28 août 2008 1
18 mars 2008 à 15:08
Merci pour l'explication sur les classes/méthodes static. En gros, on utilises les méthodes static non pas pour stocker des valeurs mais juste créer des objets ou agir sur les objets comme formater une chaine de caractères.

En ce qui concerne le passage par paramètre. Le souci c'est que j'ai trois form.

dans ma form1, j'instancie form2 en passant l'instant de form1: donc j'accède aux attributs de form1 dans form 2.
_f2 = new formChoixTable(this);
            _f2.Show();.
ensuite pour aller dans form3, form2 crée une instance de form3 en passant une instance de form2.
_f3 = new formChoixImport(this);
            _f3.Show();

Au final, dans ma form3, j'accède que aux attributs de form2, pas de form1. Je vous montre comment j'accède à form2 dans ma form3.

formChoixTable = form 2
formChoixImport  = form 3

public partial class formChoixImport : Form
{
        private formChoixTable _f2;

        public formChoixImport()
        {
            InitializeComponent();
        }
        public formChoixImport(formChoixTable f2)
            : this()
        {
            _f2 = f2;
        }
       private void test_Click(object sender, EventArgs e)
        {
            _f2 = new formChoixTable();
            _f2.maMethode() //Ici j'ai accès que aux méthodes de form2
        }
}

Donc quel solution me proposez vous pour résoudre mon souci. (C'est la raison pour laquelle j'ai évoqué les classes static comme un moyen de stockage temporaire)

Merci
0
ericdu93 Messages postés 56 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 28 août 2008 1
18 mars 2008 à 23:33
@taupe4, désolé, je ne comprends pas. Pourrai-tu fournir un exemple ? Merci.
0
ericdu93 Messages postés 56 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 28 août 2008 1
18 mars 2008 à 23:44
ok ca fonctionne, merci taupe4.
0
selemfss Messages postés 1 Date d'inscription samedi 14 avril 2007 Statut Membre Dernière intervention 15 avril 2008
15 avril 2008 à 12:11
Bonjours, dans ce même cadre j'ai un petit probleme. Il est comme suit: j'ai une form1 depuis la quelle je lance une autre form2 et puis le probleme se pose au niveau de la passation de la valeur de la forme 2 à la forme 1 que je n'ai aps fermé
0
taupe4 Messages postés 91 Date d'inscription dimanche 16 avril 2006 Statut Membre Dernière intervention 17 avril 2008 1
17 avril 2008 à 00:39
Si tu suis la méthode qui est de passer une instance de Form1 à form2, tu as alors accès à toutes les méthodes publiques de Form1, tu peux donc les appeler.

Tu peux aussi créer des événements que tu lances lorsque de l'attention doit être apportée par les écouteurs.

Je te conseille de regarder la source citée plus haut, soit http://www.csharpfr.com/codes/PASSAGE-PARAMETRES_26735.aspx, elle contient (à mon souvenir) un exemple avec des événements.
0
Rejoignez-nous