Meilleur auteur de réponses
Delegate et UserControl

Question
-
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: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(); } } // => Bouton Administration public void PCTBAdmin_Click(object sender, EventArgs e) { if (monEvent != null) { monEvent(string.Format("{0}", PCTBAdmin.Tag)); //this.Form.Close(); } } }
Dans mon Form2 (StartIcone) j'ai :
public partial class StartIcones : Form { public UCMenuPanel UserChoise; public StartIcones() { InitializeComponent(); UserChoise = new UCMenuPanel(); } }
et dans mon Form1 (application principale) j'ai:
public partial class Form1 : Form { Employe E; public Form1() { InitializeComponent(); StartIcones i = new StartIcones(); i.Show(); i.UserChoice.monEvent += new EChoixApplication(ChoixApplication); } public void ChoixApplication(string reponse) { textBox1.Text = reponse; } }
Auriez-vous une idée comment faire?
Réponses
-
Alors je viens de faire le test, j'ai ajouter mon contrôle utilisateur dans le form2.
J'ai rendu son Modifier à public (voir propriété dans le contrôle du form2) puis fait comme votre code du 1er post et cela fonctionne.
Je vous fais part du code source :
https://skydrive.live.com/redir?resid=11D26A7936907971!159&authkey=!AH0BdDBR0jg92j4
Merci de valider par "Proposer comme réponse" si celle-ci répond à votre demande !
- Marqué comme réponse paintbox00 lundi 3 décembre 2012 19:21
Toutes les réponses
-
Bonjour,
Votre événement ne sera accessible que dans le form2 et pas dans le form1. Si vous souhaitez le rendre accessible au form1, il faut créer le delegate et event sur le form2.
Merci de valider par "Proposer comme réponse" si celle-ci répond à votre demande !
-
-
Il faut faire l'event qui est dans le Form1 coté Form2 pour intercepter le bouton cliqué, puis déclarer dans le form2 un nouveau delegate event comme fait dans le user control.
Merci de valider par "Proposer comme réponse" si celle-ci répond à votre demande !
-
Si je comprends bien j'aurai :
- Pas de ligne de code dans mon UserControl
- Dans mon Form 2
Je déclare un premier delegate avec un event
public delegate void EChoixApplication(string reponse); public event EChoixApplication monEvent;
La gestion de mes boutons comme ceci : avec l'event du FORM1 déplacé dans le FORM2
UCMenuPanel m = new UCMenuPanel(); StartIcones i = new StartIcones(); //public UCMenuPanel UserChoise; public StartIcones() { InitializeComponent(); i.monEvent += new StartIcones.EChoixApplication(ChoixApplication); } // => Bouton Caisse public void PCTBCaisse_Click(object sender, EventArgs e) { if (monEvent != null) { monEvent(string.Format("{0}", m.PCTBCaisse.Tag)); //this.Form.Close(); } } // => Bouton Compta public void PCTBCompta_Click(object sender, EventArgs e) { if (monEvent != null) { monEvent(string.Format("{0}", m.PCTBCompta.Tag)); //this.Form.Close(); } } // => Bouton Administration public void PCTBAdmin_Click(object sender, EventArgs e) { if (monEvent != null) { monEvent(string.Format("{0}", m.PCTBAdmin.Tag)); //this.Form.Close(); } }
ma fonction ChoixApplication
public void ChoixApplication(string reponse) { textBox1.Text = reponse; }
mais dans ce cas, je n'ai pas accès à mon textBox1.Text puisqu'il est dans FORM1
Et toujours dans le FORM2 créer un nouveau delegate et event.
Mais je ne vois pas très bien comment récupérer le choix dans le FORM1?
Que prendra ce nouveau delegate et son event ?
- Modifié paintbox00 vendredi 30 novembre 2012 16:59
-
Alors je viens de faire le test, j'ai ajouter mon contrôle utilisateur dans le form2.
J'ai rendu son Modifier à public (voir propriété dans le contrôle du form2) puis fait comme votre code du 1er post et cela fonctionne.
Je vous fais part du code source :
https://skydrive.live.com/redir?resid=11D26A7936907971!159&authkey=!AH0BdDBR0jg92j4
Merci de valider par "Proposer comme réponse" si celle-ci répond à votre demande !
- Marqué comme réponse paintbox00 lundi 3 décembre 2012 19:21
-
-
Bonjour,
Est-ce que vous avez testé les solutions proposées ? Merci de partager avec nous les résultats, afin que d'autres personnes avec le même problème puissent profiter de cette solution.
Cordialement,
Aurel -
Bonjour,
En lisant vos différentes questions, j'ai envie de vous conseiller de jeter un coup d'oeil sur les principes de la Programmation Orientée Objet et de la Programmation tout cours, Vous y trouverez pas mal de réponses définitives à vos questions.
Bien que vous soyez dans le contexte d'une application Windwsforms (Form, Control, ...), vos questions relèvent plus des concepts de la programmation (classe, instance, propriété, méthode, communication entre objets, ...) que autres choses.
Cordialement.
- Modifié Ould MouradEditor lundi 3 décembre 2012 23:15