Utilisation d'une variable transmise de la form1 à la form2 dans un événement cl

Résolu
cs_bernard456 Messages postés 9 Date d'inscription mercredi 9 décembre 2009 Statut Membre Dernière intervention 10 juin 2010 - 16 févr. 2010 à 19:58
cs_bernard456 Messages postés 9 Date d'inscription mercredi 9 décembre 2009 Statut Membre Dernière intervention 10 juin 2010 - 21 févr. 2010 à 11:41
Bonjour,

Ca fait deux mois que j'ai commencé la programmation et c# et je suis allé beaucoup plus loin que je ne le pensais sans écrire un message sur un forum. J'ai réussi des graphiques assez complexes et mon programme prend forme beaucoup plus vite qu'espérais.

Cependant, je bloque sur un point qui me paraît trivial, mais je n'ai pas réussi à trouver une solution sur les forums comme les autres centaines de fois où j'étais bloqué^^.

Mon problème est le suivant:
je sais passé toutes sortes de choses entre deux forms avec ref ou out aussi, mais je n'arrive pas à utiliser dans ma form2, la datatable "gg" (qui me sert à créer mon graphique) dans un événement click de la form2. Alors que la datatable gg de la form1 est bien transmise à public form2 (string ..., datatable gg, int ..., etc...). et ensuite toujours dans la classe de form2, private void button_click(objet sender, eventargs e) si je remplace sender par gg, ca ne marche mais sans trop de surprise et si je remplace pas et que j'appelle ma form 3 en envoyant gg, ca me crée une erreur à la compilation.

En gros, j'ai une form1 qui envoit "gg" à la form2, qui crée le graphique en conséquence. Mais comme ca prends trop de place sur ma form2, je vais le mettre dans une form3 que j'appellerai d'un click de la form2. Mais j'arrive pas transmettre "gg" de la form1 à la 3 ou de la 2 à la 3, sachant que l'apparition de cette form3 dépend forcemment de la form2 et de son bouton click.

Je pense et j'espère avoir été clair, et vous remercie par avance pour toute aide ! Ca me résoudra au moins deux gros problèmes actuelles qui m'empêchent d'aller plus loin.

Merci.

Guillaume

--------------------------------------------------------------------------------------------
"Ce n'était rien qu'un feu de bois, mais il m'avait chauffé le corps, et dans mon âme, il brûle encore, à la manière d'un feu de joie..."

4 réponses

krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
17 févr. 2010 à 10:06
Salut

Quand tu transmets ta datatable dans le constructeur de Form2, ta variable gg n'existe, dans Form2, QUE dans le constructeur. Il faut donc que tu gardes une référence à gg dans Form2.

class Form2 : Form
{
    private DataTable maReferenceGGForm1;

    public Form2(string machin, DataTable gg, int bidule)
    {
        InitializeComponent();
        maReferenceGGForm1 = gg; // On a gardé une référence, ce qui fait que
        // ta table est accessible depuis n'importe quelle méthode de Form2

        // ...
    }

    private void Button_Click(object sender, EventArgs e)
    {
        // ...
        // Tu peux tout à fait utiliser maReferenceGGForm1 ici
        // ...
    }
}


Petite info sur la modification des paramètres des événements (Button_Click par exemple) : Tu ne peux pas changer le type ni la valeur des arguments.
En l'occurrence, un Click sur un bouton reçoit FORCEMENT un object, puis un EventArgs (cependant, EventArgs peut être remplacé par n'importe quelle classe dont il hérite, mais ça ne sert à rien).
Quant à leurs valeurs, sender contient toujours une référence à l'objet ayant engendré l'événement, et EventArgs est une classe basique qui ne contient rien, grosso-modo.
Pour simplifier, il n'y a aucun moyen de modifier ce que tu transmets à ton événement.

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
3
cs_bernard456 Messages postés 9 Date d'inscription mercredi 9 décembre 2009 Statut Membre Dernière intervention 10 juin 2010
17 févr. 2010 à 20:44
Merci beaucoup pour ton aide krimog!!

Je n'ai pas encore essayé, mais au vu de ton message, ça ne peut que fonctionner!

Comme tu peux le voir, comme j'ai appris par les forums et un peu par la lecture, je peux avoir de grosses lacunes de compréhension générale, car je ne fais souvent qu'adapter un truc trouvé et une fois que je l'ai fait une fois en galèrant un peu je peux le refaire à l'infini.

Jusque là, ca marchait bien, j'avais aps trop été bloqué, mais ces lacunes font que je peux l'être à tout moment.

Encore un grand merci à toi, et à tous ces forumers qui font croire que ce monde n'est pas remplie seulement d'égoïsme^^!
0
cs_bernard456 Messages postés 9 Date d'inscription mercredi 9 décembre 2009 Statut Membre Dernière intervention 10 juin 2010
17 févr. 2010 à 21:57
Bon ben j'ai essayé, mais j'ai un autre problème inconnu au bataillon.
Donc dans form1, je remplis ma datatable, dans form 2 je mets " private DataTable gg444;" avant public form2, après initialize componenent, jai "gg444=gg;" , ensuite dans button click, j'envoies gg444 avec le fameux Form Form3 = new Form3(gg444);
Form3.ShowDialog(); et après je recois dans form3 avec public form3 (datatable gg444)
jinitialise le graphique après initialize componenent, et hop tout est beau!

MAIS, unfortunately, j'ai l'index qui est out of range exception. Après, recherche et suivant ce qui est indiqué, gg444 ne contiendrait pas de donnée, ou pire son index serait négatif. Cependant, form2 ne modifie en rien gg et encore moins gg444, alors pourquoi avec la form2 j'arrive à afficher mon graphique à souhait sur la form2 alors que gg qui marche pr form2, ne marche pas pour form3. Si ca venait d'un mauvais transfert entre form1 et2 je n'aurai pas eu de graphique sur le 2. Mais la ca me surligne form3.showdialog(); avec cette exception alors que pour moi, gg444=gg et donc si j'ai l'exception ici, je devrai l'avoir aussi entre form1 et 2 ...

Parfois, je suis un peu dépassé par la logique de mon ordinateur. Et pourtant, je sais bien qu'il ne fait que ce qu'il doit faire!
0
cs_bernard456 Messages postés 9 Date d'inscription mercredi 9 décembre 2009 Statut Membre Dernière intervention 10 juin 2010
21 févr. 2010 à 11:41
Merci encore Krimog, j'ai réussi à résoudre le petit problème qu'il y avait et qui venait de moi et non de ton bout code ...
0
Rejoignez-nous