IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Problème, Transfert List d'une form à l'autre


Sujet :

C#

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 12
    Points : 7
    Points
    7
    Par défaut Problème, Transfert List d'une form à l'autre
    Salut à tous,

    Alors depuis quelques heures je stagne sur un problème qui est normalement pas méchant. Alors je vais essayer de vous l'expliquer d'une manière clair pour que vous puissiez m'aider , je vais faire un exemple simplifier de mon problème.

    Alors l'énoncer le voici :

    - J'ai une Form, du nom de form1, dans cette Form, j'ai une checkedListBox.
    - J'ai une Class, du nom de class2 dans laquelle se trouve à un certain moment une List destiné à la checkedListBox.

    Donc en gros. Ma form1 lance une procédure qui aboutit par l'appel d'une méthode qui se trouve dans class2. Cette méthode aura en sa possession une List. Et j'aimerai bien envoyer cette List à la form1 pour que je puisse remplir la checkedListBox.

    Mais, oui il y a un mais, la contrainte c'est que c'est asynchrone. La List est prête n'importe quand donc. Mettre la List en variable global, ou la faire passer via Settings etc ne peut pas fonctionner.

    Mon idée c'était de crée une méthode dans la form1 qui permet de changer la checkedListBox et cette même méthode serait appelé par la méthode qui reçoit la List dans la class2, mais ça aussi ne fonctionne pas, parce que pour appeler la méthode de form1 à partir de class2 je dois crée une instance et l'appeler par la suite, et donc si j'ai bien compris la checkedListBox crée a partir de class2 n'est pas la même que l'original

    Je sais que l'explication que j'ai donné est un peu tordu mais j'ai du mal à décrire le problème.

    Voici l'exemple :

    Form:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace Test
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
     
            public void SetListBox(string ite)
            {
                checkedListBox1.Items.Add(ite);
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                class2 test = new class2();
                test.callForm1();
            }
        }
    }
    class2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Test
    {
        class class2
        {
            public void callForm1()
            {
                Form1 form1 = new Form1();
                form1.SetListBox("checkBox1");
            }
        }
    }

    Voilàa si quelqu'un pouvait me mettre sur une piste je lui en serai reconnaissant.

    Merci d'avance

  2. #2
    Membre actif
    Inscrit en
    Octobre 2007
    Messages
    236
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2007
    Messages : 236
    Points : 233
    Points
    233
    Par défaut
    Essais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace Test
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
     
            public void SetListBox(string ite)
            {
                checkedListBox1.Items.Add(ite);
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                class2 test = new class2(this);
                test.callForm1();
            }
        }
    }

    Un constructeur avec lequel on peut passer l'instance du formulaire qu'on veut communiquer avec.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Test
    {
        class class2
        {
            // Sauver pour plus tard
            Form1 form = null
     
            public void callForm1(Form1 frm)
            {
                this.form = frm; // Sauver...
                form.SetListBox("checkBox1");
            }
        }
    }

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Merci emmr.rida, ça fonctionne mieux mais pour le cas réel ça ne peut fonctionner je pense.

    Je vais l'expliquer en quelques lignes /

    C'est une application à base de WCF en duplex asynchrone.

    Donc la "form1" fait appel à une opération du service sans attendre de réponse. Une fois que le service a fini l'opération, il fait appel via le callback à une opération se trouvant donc dans "class2". Cette méthode se retrouve avec une collection qu'elle doit afficher sur la form1. En gros c'est class2 ====> form1 qui doit se passer.


    Merci en tout cas pour cette piste, que je pense pouvoir tout de même utiliser si il n'y a pas de manière plus "propre".

  4. #4
    Membre habitué

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2008
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 76
    Points : 145
    Points
    145
    Par défaut
    Salut,

    Juste une question : la class2 doit faire un traitement spécial sur la réponse du service?

    Parce que sinon, comme c'est déjà Form1 qui appelle le service, pourquoi tu n'utilises pas une methode de la classe Form1 comme méthode de rappel à la fin de l'opération asynchrone?

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Salut phertzog,

    Non la méthode se trouvant dans la class2 ne fait rien de spécial, elle est juste censé transmettre la Collection à la form pour éditer certains champs.

    Pour ce qui est du pourquoi je ne fais pas appel à une méthode se trouvant dans form1? je ne sais pas trop. J'ai simplement implémenté l'interface pour le callback , j'ai pas pensé à l'imbriquer dans form1.

    Par ailleurs je ne sais pas si c'est faisable, corrige moi si je me trompe.

    Merci.

  6. #6
    Membre habitué

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2008
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 76
    Points : 145
    Points
    145
    Par défaut
    Salut,

    Je ne suis pas un expert en application WinForm donc je n'ai pas de réponse toute prête sur le fait que ça marche ou pas. Je pense que le plus simple est de tester (d'ailleurs je suis intéressé par la conclusion ).

Discussions similaires

  1. problème à passer des valeurs d'une form à l'autre
    Par gibea00 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 07/08/2007, 13h45
  2. Réponses: 3
    Dernier message: 19/05/2006, 15h54
  3. passage d'une form à l'autre
    Par mat-tech dans le forum Delphi
    Réponses: 8
    Dernier message: 13/05/2006, 15h15
  4. [C#]Comment passer un parametre d une Form à l'autre ?
    Par ToxiZz dans le forum Windows Forms
    Réponses: 9
    Dernier message: 08/02/2006, 12h28
  5. Réponses: 2
    Dernier message: 04/10/2005, 20h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo