Appel de valeurs d'un formulaire à un autre

Résolu
1ModdingMaster - 26 janv. 2013 à 23:51
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 - 31 janv. 2013 à 13:42
Bonjour à toutes et à tous, je suis étudiant en développement informatique (C#), mes capacités sont encore un peu basiques et je dois actuellement faire face à un problème incompréhensible, j'espère que vous pourrez m'aider. Je vous explique mon problème :

Je travaille sur un programme constitué de 4 formulaires (mon problème ne concerne que deux formulaires, le formulaire 3 et le formulaire 4) :

- Formulaire 1 : Demande de Mot de Passe,
- Formulaire 2 : Simulation de Chargement (ProgressBar),
- Formulaire 3 : Programme Principal,
- Formulaire 4 : Fenêtre à Choix de Valeurs.

Sur le formulaire 3 j'ai un Label qui sert à afficher le résultat final, un bouton qui sert à ouvrir le formulaire 4.

Sur le formulaire 4 j'ai une multitude de CheckBox dont je souhaiterai exploiter les valeurs que j'aurai apposées, et un bouton qui permet de valider mes choix (nombre de cases cochées) ET de retourner sur le formulaire 3 actif tout en fermant le formulaire 4.

Mais ce que je souhaiterais obtenir comme résultat, c'est dès que j'ai coché mes cases désirées, et refermé le formulaire 4, que mes valeurs de type string apposées sur mes CheckBox se retrouvent inscrite sous forme de ligne et concaténées dans le Label du formulaire 3.

Je ne sais pas si je suis très clair, si vous ne comprenez pas je tâcherai de réexpliquer en mieux !

Je vous remercie d'avance pour les réponses que vous pourrez m'apporter,


MM

10 réponses

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
31 janv. 2013 à 13:42
Re,

en effet, le Label3.Text = .... était juste un exemple.

Je te conseille de mettre un MsgBox après le remplissage de la classe afin de voir si tout va bien

// Rempli la structure lors de la fermeture du Form4:
public btnValider_click(object sender, EventArg e)
{
    refSaisie.checkbox1 = CheckBox1.Checked.ToString();
    refSaisie.checkbox2 = CheckBox2.Checked.ToString();
    // ect...

    string strDebug "cb1 " + refSaisie.checkbox1 + " - cb2 = " + refSaisie.checkbox2;

    MessageBox.Show("Fermeture du Form4 : resultat =\r\n" + strDebug);
}



tu peux construire une chaine résultat comme ceci :
[i](juste après les instructions
Form4 frm4 = new Form4(ref monObjet);
DialogResult res = frm4.ShowDialog(); )/i

string strResult = string.Format(
"CB1={0} CB2={1} ect...",
monObjet.checkbox1,
monObjet.checkbox2);

bye...
3
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
27 janv. 2013 à 14:21
Salut,

Une solution est de créer des fonctions d'acces (get/set) dans le formulaire 4 puis d'apeller ces fonctions d'accès pour chaque champs du formulaire.
Une autre solution très simple,
est de créer une classe dans le namespace de l'application contenant toutes les valeurs saisies dans le formulaire 4.
Puis de passer cet objet en référence au formulaire 4 et de le remplir lors de sa fermeture. Au retour sur Form3, l'objet est rempli avec les valeurs voulues.

// Exemple d'objet contenant les champs de saisie
public class structSaisie
{
    public string checkbox1;
    public string checkbox2;
    //ect...
    public structSaisie()
    {
        checkbox1 ""; checkbox2 ""; //ect...
    }
}

// Ajouts d'une variable membre dans Form4 :
private structSaisie refSaisie = null;

// Affecte sa référence dans le construteur de Form4 :
public Form4( ref structSaisie refObj  )
{
    refSaisie = refObj;
}

// Rempli la structure lors de la fermeture du Form4:
public btnValider_click(object sender, EventArg e)
{
    refSaisie.checkbox1 = CheckBox1.Checked.ToStrng();
    refSaisie.checkbox2 = CheckBox2.Checked.ToString();
    // ect...
}

// Lors de l'appel au form4, passe l'objet au construteur de form4
structSaisie monObjet = new structSaisie();
Form4 frm4 = new Form4(ref monObjet);
DialogResult res = frm4.ShowDialog();

// Si l'utilisateur a cliqué sur OK, la structure est remplie
if( res == DialogResult.OK )
{
    Label3.Text = monObjet.checkbox1 + monObjet.checkbox2; // ect...
}



bye...
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
27 janv. 2013 à 16:39
Bonsoir, je il n'est pas nécessaire d'utiliser le mot clé ref, en effet une classe perso est toujours passée en référence en C#.
Ce mot clé n'est utile que pour les types de base (int, string, bool etc...)


Whismeril
0
1ModdingMaster
27 janv. 2013 à 18:46
Bonsoir, je vous remercie en tout cas de ces premières réponses que vous avez pu m'apporter j'essaye ça directement, je vous tient au courant si j'ai d'autres soucis.

Merci beaucoup.


MM
0

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

Posez votre question
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
28 janv. 2013 à 11:49
Bonjour,

Une autre méthode très élégante consiste à utiliser les événements.
Lorsque l'utilisateur valide le formulaire de saisie, un événement (qui peut fournir les paramètres saisis) est déclenché. La fenêtre principale, étant abonnée à cette événement, intercepte l'événement et remplit ses champs.
Pourquoi cela est-il élégant:
Car cela permet de dé-coreler les deux formulaires et surtout le formulaire de saisie. Ainsi, d'autres fenêtes peuvent très bien se brancher au formulaire de saisie pour effectuer d'autres actions.

Voici une source très intéressante qui expose le passage par événements et le passage par paramètres: PASSAGE DE PARAMETRES.

Avec tout ça, t'es paré pour ton besoin

Bonne journée,

Billou_13

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
0
1ModdingMaster
28 janv. 2013 à 22:34
Bonjour, j'ai vu vos messages et je vous en remercie, je comprend très légèrement vos explications si bien qu'elles me paraissent claires, cependant je n'arrive pas à les mettre à l'œuvre dans mon contexte, j'ai essayé, heureusement que j'avais fait une copie car j'ai eu le droit à un plantage, en faite je pense que vos réponses sont bonnes mais moi je ne les comprends pas, je ne sais pas les utiliser, j'ai juste retenu la méthode Get / Set citée plus haut. Le mieux est que je fasse part de mon problème à mon professeur qui lui saura me montrer je l'espère une technique visuelle, mais je vous remercie tout de même de m'avoir éclairé.

PS : J'ai un autre soucis, je me suis récemment cantonné à la liaison base de données - C#, cependant j'ai essayé d'affecter une base de données de type Access 2010 à un ComboBox mais j'ai eu le droit à un super plantage qui à faillit me coûter mon application. Je vous annonce ça comme ça mais je créerais sans doute un nouveau sujet dans un lieu plus déterminé sur le forum !

Merci,


MM
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
29 janv. 2013 à 08:46
Bonjour, normalement c'est une question par post!
Je ne sais pas te répondre pour access, mais je peux essayer de détailler un peu la méthode de yann.


Tu crees une classe qui va te servir à enregistrer les données à transferer.


public class structSaisie
{
    public bool checkbox1;//yann avait mis string mais je pense que bool pour enregistrer les valeurs de "checked"
    public bool checkbox2;
    //ect...
    public structSaisie()
    {
    }
}




Quand tu crées un formulaire (Form4), il y a cette ligne que se met toute seulle:


public Form4()
{
}


Tu peux ajouter entre les parenthèses des paramètres qui seront transeféré à l'instance de Form4 au momment de son initilaisation. C'est comme pour une méthode.


public Form4(structSaisie MesCheckBox)
{
    mesChekBox= MesCheckBox;//tu affectes la variable passée en paramètre à une variable locale du Form4 du bon type
}


Tu ajoutes un bouton OK, dans l'événement Click, tu affectes les valeurs des checkedBox au propietes de mesChekBox.



Enfin pour appeler Form4 et recevoir le contenu des cheksbox, dans Form3 tu écris:
structSaisie monObjet = new structSaisie();
Form4 frm4 = new Form4(ref monObjet);
frm4.ShowDialog(this);
//ici monObjet contient les valeurs des checkedBox ou rien si le formulaire n'a pas été fermé pas le bouton OK

Whismeril
0
1ModdingMaster
29 janv. 2013 à 23:23
Eh bien merci beaucoup, je vais essayer cette même technique détaillée, je vous tiens au courant de ma progression.

Merci,


MM
0
1ModdingMaster
30 janv. 2013 à 21:47
Bonjour, donc je reprends après un essai plutôt positif je dirais, cependant j'ai juste encore une question ; je m'adresse à Yan_Lo_San qui est la première personne à avoir répondu :

J'ai eu un cours aujourd'hui et comme par hasard c'est aujourd'hui que j'ai appris comment créer une classe, et ça m'a bien aidé à vrai dire, j'ai donc réalisé la totalité de ce que tu me proposait comme réponse excepté le dernier point :

-----------------------------------------------------------------------

// Si l'utilisateur a cliqué sur OK, la structure est remplie
if( res == DialogResult.OK )
{
Label3.Text = monObjet.checkbox1 + monObjet.checkbox2; // ect...
}

-----------------------------------------------------------------------

Tu te rappelle avoir écrit ça, et bien je ne sais pas où le mettre en fait ! Dois-je le mettre après l'appel de la Form4, ou bien à un autre endroit s'il te plaît ?

En différenciant ta proposition et mon propre code, je dois dire que ce n'est pas tout à fait pareil ! Toi tu me propose d'écrire directement le résultat des Checkbox les uns après les autres dans le Label3, cependant en vue du code que j'ai créé, il me parait plus judicieux d'imposer ces résultats dans une variable, variable que je placerai ensuite dans ce fameux Label3, est-ce possible ?

Voilà comment j'ai constitué ma ligne de code :

-----------------------------------------------------------------------

label1.Text += "".PadRight(8) + "Options" + "".PadRight(24) + "= "+ XXXX + "\r";

-----------------------------------------------------------------------

Là où le XXXX est présent, c'est ici que je dois placer une variable qui contiendra toutes les valeurs des CheckBox que j'aurais choisies, ça peut être une valeur, comme deux, comme cinq, comme vingt-cinq (puisqu'en effet j'en ai vingt-cinq), donc est-ce que cela est possible s'il te plaît !

Je te remercie d'avance pour ta réponse,


MM
0
1ModdingMaster
30 janv. 2013 à 23:05
En fait j'ai trouvé, j'ai placé le code qui me posait problème à la suite de la création de la Form4. Je n'ai détecté aucune erreur, aucun soulignement, cependant l'opération tant attendue ne marche pas, j'ai pourtant suivi à la lettre ce que tu me proposait comme solution. Aurais-tu une idée d'où est-ce que cela pourrait venir s'il te plaît ? Je sais ce n'ai pas évident de participer à l'aide d'un programme si on n'a pas ce programme sous les yeux, mais bon...

Merci,


MM
0
Rejoignez-nous