Création d'events dans un UserControl

Création d'events dans un UserControl - C#/.NET managed - Programmation

Marsh Posté le 23-07-2009 à 17:17:05    

Bonjour,
 
Je bosse actuellement sur une Form qui contient un toolStrip. Dans cette dernière j'affiche un UserControl, ce dernier est basique, il contient simplement deux boutons.

Code :
  1. private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             UserControl1 test = new UserControl1();
  4.             ToolStripControlHost testHost = new ToolStripControlHost(test);
  5.             ToolStripDropDown dropDown = new ToolStripDropDown();
  6.             dropDown.Items.Add(testHost);
  7.             this.toolStripDropDownButton1.DropDown = dropDown;
  8.         }


Au final j'ai cette organisation :
 
Form1
 - ToolStrip
       - DropDownButton
              - UserControl
                     - Button1
                     - Button2
 
Jusque là tout va bien, quand je click sur le DropDownButton de ma ToolStrip, j'ai l'affichage de mon control mais maintenant je n'arrive pas à gérer les évènements de chacun de mes deux boutons contenus dans mon UserControl... Comment fait pour que, lorsque je clique sur un de mes deux boutons, le DropDownButton se ferme et le resultat est renvoyé dans la Form principale ?
 
Je suis tombé là dessus mais j'ai bien du mal à déchiffrer tout ce qui est fait dans cette source...
http://www.codeproject.com/KB/menu [...] pDown.aspx
 
Merci d'avance pour vos réponses.


Message édité par Twiddy le 23-07-2009 à 17:20:44
Reply

Marsh Posté le 23-07-2009 à 17:17:05   

Reply

Marsh Posté le 24-07-2009 à 20:08:25    

je pense qu'il faut que tu crées simplement un event custom sur ton UC. Ensuite, au click de tes deux boutons, tu relances ton events custom. ce qui te permettra de l'intercepter dans ton form.  
 
Tu déclares donc ceci dans ton uc:
public event EventHandler<EventArgs> buttonClick;
 
Dans le click de tes buttons tu ajoutes ceci
 
if (buttonClick != null)
    buttonClick.Invoke(sender, EventArgs.Empty);
 
Dans le constructeur de ta form tu ajoutes ceci:
this.UserControl1.buttonClick += new EventHandler(uc_buttonClick);
 
private void uc_buttonClick(Object sender, EventArgs e)
{
      if (sender is Button)
      {
           //traitement sur ta dropdown
           ((Button)sender).Text = "J'ai cliqué ici";
      }
}
 
Si maintenant, tu souhaites récupérer des informations de ton UserControl via l'EventArgs.  
Crée alors une nouvelle class qui hérite de EventArgs dans lequel tu mettra toi même les informations qui doivent être transmise à ta form.  
 
hope this help


Message édité par moi23372 le 24-07-2009 à 20:38:16

---------------
quand un homme raisonne mal c'est qu'il n'a pas les données pour raisonner mieux (diderot)
Reply

Marsh Posté le 25-07-2009 à 11:00:05    

Merci pour l'info, entre temps j'ai testé quelques trucs de mon côté, j'ai effectivement créé un event dans mon UC, puis un delegate. De cette manière je récupère mon évènement dans la form, par contre je suis obligé de faire un toolStripDropDownButton1.DropDown.Close pour que le menu se referme après sélection.
 
Je ne sais pas quelle méthode est la plus propre ayant peu de connaissance sur ce type de sujets...

Reply

Marsh Posté le 25-07-2009 à 12:13:30    

ça me parait adéquat le close sur la dropdown.  
 
Pour ce qui est du delegate, c'est pareil. Faut pas oublié qu'au nouveau code intermédiaire généré par le compilateur .NET (MSIL), un event et un delegate, c'est exactement la même chose.


---------------
quand un homme raisonne mal c'est qu'il n'a pas les données pour raisonner mieux (diderot)
Reply

Marsh Posté le 25-07-2009 à 13:55:52    

Ah d'accord, je ne savais pas, je vais me renseigner sur le sujet. Merci pour ton aide :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed