2009-06-03 4 views
23

Salut. J'ai un UserControl qui contient une zone de texte. Je voulais accéder à l'événement textchanged de la zone de texte mais dans les propriétés d'événement de la commande usercontrol je ne vois pas les événements pour la zone de texte. Comment puis-je exposer et gérer des événements particuliers des contrôles enfants à partir du UserControl publiquement exposé dans Winforms avec C#.exposer et déclencher l'événement d'un contrôle enfant dans un usercontrol en C#

Répondre

36

Vous pouvez surface un nouvel événement et passer des abonnements directement à travers le contrôle, si vous aimez:

public class UserControl1 : UserControl 
{ 
    // private Button saveButton; 

    public event EventHandler SaveButtonClick 
    { 
     add { saveButton.Click += value; } 
     remove { saveButton.Click -= value; } 
    } 
} 
+0

Chose impressionnante! J'ai fait quelque chose de similaire, en ajoutant explicitement un gestionnaire d'événements car j'avais exposé publiquement le contrôle enfant via le contrôle usercontrol. Votre suggestion est la manière la plus propre de celui-ci! Merci! –

+11

Malgré son élégance, cette solution a un inconvénient majeur: l'argument 'sender' transmis au gestionnaire sera le Button, pas le UserControl ... Cela rend impossible l'utilisation du même gestionnaire pour plusieurs instances du contrôle –

+0

rien d'autre pour faire ce travail? d'une certaine manière, le gestionnaire d'événements ajouté ne fonctionne pas. – Nap

1

Exposez l'intégralité de TextBox en tant que propriété publique dans le contrôle utilisateur et abonnez-vous à ses événements comme vous le souhaitez.
Exemple:

class myUserControl: UserControl { 
private TextBox _myText; 
public TextBox MyText { get {return _myText; } } 

}

Après avoir fait cela, vous pouvez souscrire à l'un de ses événements comme ceci:

theUserControl.MyText.WhatEverEvent += ... 

Hope this helps!

+0

merci, je l'avais fait la même chose que maintenant. Était à la recherche d'une solution élégante qui a été fournie ci-dessus.Merci de votre aide. + 1 –

Questions connexes