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 :

Delegate et UserControl


Sujet :

C#

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 36
    Par défaut Delegate et UserControl
    Bonjour,

    voici mon problème.
    J'ai mon Form1 qui est l'application principale.
    J'ai créé un UserControl que j'ai intégré dans un Form2(StartIcones) et qui permet à l'utilisateur de faire un choix entre 3 rubriques. Ces rubriques sont symbolisées par des icônes.

    Je voudrais que mon Form1 récupère le choix fait par l'utilisateur.
    j'ai donc utilisé un delegate et un event.

    Si je n'utilise pas de UserControl et fais mon design directement dans mon Form2, pas de problème je récupère correctement le choix de l'utilisateur.
    Mais.. dans le cas d'un UserControl importé dans le Form2(StartIcones) cela ne fonctionne plus.
    Le Form1 ne récupère plus le choix fait dans le Form2(UserControl)
    J'ai mis mon delegate et mon event directement dans le code behind de mon UserControl. Ce qui donne ceci:
    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
    32
    33
    34
    35
    36
    37
    38
     
    public partial class MenuPanel : UserControl
        {
            public delegate void EChoixApplication(string reponse);
            public event EChoixApplication monEvent;
     
            public MenuPanel()
            {
                InitializeComponent();
            }
     
            // => Bouton Caisse
            public void PCTBCaisse_Click(object sender, EventArgs e)
            {
                if (monEvent != null)
                { 
                    monEvent(string.Format("{0}", PCTBCaisse.Tag));
                }
            }
     
            // => Bouton Compta
            public void PCTBCompta_Click(object sender, EventArgs e)
            {
                if (monEvent != null)
                {
                    monEvent(string.Format("{0}", PCTBCompta.Tag));
                }
            }
     
            // => Bouton Administration
            public void PCTBAdmin_Click(object sender, EventArgs e)
            {
                if (monEvent != null)
                {
                    monEvent(string.Format("{0}", PCTBAdmin.Tag));
                }
            }
        }
    et mom Form1 "s'abonne" à l'événement.
    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
     
     public Form1()
            {
                InitializeComponent();
     
                StartIcones i = new StartIcones(); 
     
     
                i.Show();
                i.monEvent += new StartIcones.EChoixApplication(ChoixApplication);
     
             }
     
           // Récupération du choix dans une TextBox
            public void ChoixApplication(string reponse)
            {
                textBox1.Text = reponse;
            }
        }
    Auriez-vous une idée?

    Merci

  2. #2
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    il faut s'abonner au event de votre usercontrol (l'instance que utliser form2 )dans form1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class form2:form
    {
      public usercontrol DoChoose ;
      public form2()
      {
       DoChoose =new usercontrol ();
      }
     
    .....
    }
    et dans ton appel dans la form1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     StartIcones i = new StartIcones(); 
                i.DoChoose.monEvent += new StartIcones.usercontrol .EChoixApplication(ChoixApplication);
      i.Show();

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 36
    Par défaut
    Bonjour Azstar,

    merci pour votre aide.
    J'ai testé ce que vous proposez, mais le Form 1 ne reconnait pas DoChoose.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    i.DoChoose.monEvent += new StartIcones.UserControl.EChoixApplication(ChoixApplication);
    ainsi que le UserControl. Ils sont tous les 2 soulignés.
    Mecri

  4. #4
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    dans form1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Form2 frm = new Form2();
                frm.DoChoose.monEvent += new EChoixApplication(target);
                frm.Show();

    form2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
     public partial class Form2 : Form
        {
            public MenuPanel DoChoose;
            public Form2()
            {
     
                InitializeComponent(); 
                DoChoose = new MenuPanel();
            }
    ...................
        }
    usercontrol

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public delegate void EChoixApplication(string reponse);
        public partial class MenuPanel : UserControl
        {
     
            public event EChoixApplication monEvent;
     
            public MenuPanel()
            {
                InitializeComponent();
            }
    .............
    }

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 36
    Par défaut
    Cela ne change rien, il me dit dans Form1 que Form2 ne contient pas de définition pour UserChoise.

  6. #6
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    UserChoise????

    frm.DoChoose.monEvent += new EChoixApplication(target);

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 36
    Par défaut
    Oui c'est bien DoChoose, de mon coté je l'ai appelé UserChoise (DoChoose = UserChoise)

    Target, c'est la fonction que j'appelle?

  8. #8
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    tu peux m'envoyer le code juste le nécessaire pour usercontrol (definition event ) et form1 (juste appel form2) et form 2

    sinon ; vérifier si vous avez public devant UserChoise dans ton form2

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 36
    Par défaut
    Voici le UserControl:
    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
     
    public partial class UCMenuPanel : UserControl
        {
    public delegate void EChoixApplication(string reponse);
            public event EChoixApplication monEvent;
     
            public UCMenuPanel()
            {
                InitializeComponent();
            }
     
            // => Bouton Caisse
            public void PCTBCaisse_Click(object sender, EventArgs e)
            {
                if (monEvent != null)
                { 
                    monEvent(string.Format("{0}", PCTBCaisse.Tag));
                    //this.Form.Close();
                }
            }
     
            // => Bouton Compta
            public void PCTBCompta_Click(object sender, EventArgs e)
            {
                if (monEvent != null)
                {
                    monEvent(string.Format("{0}", PCTBCompta.Tag));
                    //this.Form.Close();
                }
            }
    }
    Le Form2 qui contient le USerControl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public partial class StartIcones : Form
        {
            public UCMenuPanel UserChoise;
     
            public StartIcones()
            {
                InitializeComponent();
                UserChoise = new UCMenuPanel();
            }
     
        }
    et le Form1 qui doit récupérer le résultat
    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
     
     public Form1()
            {
                InitializeComponent();
     
                FormLogin f = new FormLogin(); // Instance d'une fenetre login
                StartIcones i = new StartIcones();
     
                i.UserChoice += new StartIcones.UserChoise.EChoixApplication(ChoixApplication);
                    i.Show();
     
             }
     
            public void ChoixApplication(string reponse)
            {
                textBox1.Text = reponse;
            }

  10. #10
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    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
    32
     
    public delegate void EChoixApplication(string reponse);
    public partial class UCMenuPanel : UserControl
        {
     
            public event EChoixApplication monEvent;
     
            public UCMenuPanel()
            {
                InitializeComponent();
            }
     
            // => Bouton Caisse
            public void PCTBCaisse_Click(object sender, EventArgs e)
            {
                if (monEvent != null)
                { 
                    monEvent(string.Format("{0}", PCTBCaisse.Tag));
                    //this.Form.Close();
                }
            }
     
            // => Bouton Compta
            public void PCTBCompta_Click(object sender, EventArgs e)
            {
                if (monEvent != null)
                {
                    monEvent(string.Format("{0}", PCTBCompta.Tag));
                    //this.Form.Close();
                }
            }
    }
    Le Form2 qui contient le USerControl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public partial class StartIcones : Form
        {
            public UCMenuPanel UserChoise;
     
            public StartIcones()
            {
                InitializeComponent();
                UserChoise = new UCMenuPanel();
            }
     
        }
    et le Form1 qui doit récupérer le résultat
    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
     
     public Form1()
            {
                InitializeComponent();
     
                FormLogin f = new FormLogin(); // Instance d'une fenetre login
                StartIcones i = new StartIcones();
     
                i.UserChoice.monEvent += new EChoixApplication(ChoixApplication);
                    i.Show();
     
             }
     
            public void ChoixApplication(string reponse)
            {
                textBox1.Text = reponse;
            }

  11. #11
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 36
    Par défaut
    UserChoise (DoChoose pour vous) n'est toujours pas disponible dans le Form 1

  12. #12
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    UserChoise (DoChoose pour vous) n'est toujours pas disponible dans le Form 1
    il est toujours disponible dans form1 via form2 ;mais une fois form2 ne plus la UserChoise ne sera pas disponible ,et c'est logique il n'existe que à travers form2

  13. #13
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 36
    Par défaut
    Oui mais c'est dans le code behind du Fom1 qu'il n'est pas disponible. Visual Studio me dit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    'MVC_Gestion_Resto.StartIcones' ne contient pas une définition pour 'UserChoice' et aucune méthode d'extension 'UserChoice' acceptant un premier argument de type 'MVC_Gestion_Resto.StartIcones' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante*?)

  14. #14
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    tu parle de UserChoice (l'instance de MenuPanel ) ou tu veux travailé avec le menupanel dans autre place

    NB: que UserChoice est utilisé dans form2 ne pas dans form1 alors pour l'utiliser encore une fois tu peux fait un autre simple instance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MenuPanel  autreDoChoise= new MenuPanel();

  15. #15
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 36
    Par défaut
    C'est bien le USerChoise du Form1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     i.UserChoice.monEvent += new EChoixApplication(ChoixApplication);
    qui me renvoi cette errerur

  16. #16
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     i.UserChoice.monEvent += new EChoixApplication(ChoixApplication);
    i est la form2 ne pas fom1

  17. #17
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 36
    Par défaut
    Oui mais lors de l'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    i.UserChoice.monEvent += new EChoixApplication(ChoixApplication);
    dans le Form1. Visula Studio me met le message d'erreur comme quoi UserChoise est manquant dans StartIcones.

  18. #18
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    Citation Envoyé par Subteranea Voir le message
    Oui mais lors de l'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    i.UserChoice.monEvent += new EChoixApplication(ChoixApplication);
    dans le Form1. Visula Studio me met le message d'erreur comme quoi UserChoise est manquant dans StartIcones.
    puisque ta
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public partial class StartIcones : Form
        {
            public UCMenuPanel UserChoise;
    ....
    alors i.UserChoice doit être reconnaît

  19. #19
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 36
    Par défaut
    Citation Envoyé par azstar Voir le message
    puisque ta
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public partial class StartIcones : Form
        {
            public UCMenuPanel UserChoise;
    ....
    alors i.UserChoice doit être reconnaît
    Non justement c'est là qu'est le problème

  20. #20
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    ta quoi autre que ca ?!!!

Discussions similaires

  1. [C#] Inserer dynamiquement un userControl
    Par topolino dans le forum ASP.NET
    Réponses: 9
    Dernier message: 23/02/2005, 13h51
  2. [C#] UserControl
    Par topolino dans le forum ASP.NET
    Réponses: 8
    Dernier message: 22/01/2005, 20h26
  3. XMLRAD equivalent usercontrol ASp .NET
    Par le-roy_a dans le forum XMLRAD
    Réponses: 10
    Dernier message: 10/12/2004, 14h09
  4. Réponses: 12
    Dernier message: 18/03/2004, 15h09
  5. [VB6] [UserControl] Évènements personnalisés
    Par Frankywinky dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 27/05/2003, 17h56

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