J'ai une liste déroulante dans un contrôle personnalisé. J'utilise ce contrôle personnalisé dans un formulaire. Je voudrais pouvoir obtenir l'événement de changement d'index de boîte aux lettres quand je travaille dans le formulaire. Comment puis je faire ça?C# Récupère les événements d'un contrôle dans un contrôle personnalisé
Répondre
Cela peut être un désavantage d'un UserControl. Vous devez republier les événements et les propriétés d'un ou de plusieurs de ses contrôles incorporés. Considérez l'alternative: si ce UserControl contient seulement un ListBox alors vous feriez mieux de simplement hériter de ListBox au lieu de UserControl.
Anyhoo, vous devrez relancer l'événement SelectedIndexChanged. Et vous devrez sûrement être en mesure de laisser le code client lire l'élément actuellement sélectionné. Ainsi:
public partial class UserControl1 : UserControl {
public event EventHandler SelectedIndexChanged;
public UserControl1() {
InitializeComponent();
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e) {
EventHandler handler = SelectedIndexChanged;
if (handler != null) handler(this, e);
}
public object SelectedItem {
get { return listBox1.SelectedItem; }
}
}
Si vous utilisez WinForms, vous devez câbler cet événement manuellement. Créez un événement avec la même signature sur votre contrôle personnalisé, créez un gestionnaire pour le pair sur la liste d'origine à l'intérieur de votre contrôle personnalisé et dans ce gestionnaire, déclenchez l'événement nouvellement créé. (Ignorer tout cela si vous utilisez WPF)
Oui j'utilise WinForm, un exemple serait utile – Wildhorn
Vous pouvez ajouter un événement proxy pour le contrôle personnalisé
public event EventHandler<WhatEverEventArgs> IndexChanged {
add { listBox.IndexChanged += value; }
remove { listBox.IndexChanged -= value; }
}
+1 Les propriétés d'événement semblent être une fonctionnalité peu connue. En plus de cette situation, ils sont utiles pour stocker les délégués du gestionnaire d'événements dans une EventHandlerList (ce qui est généralement le cas des contrôles intégrés) au lieu d'avoir un délégué de gestionnaire d'événements réel comme champ de votre classe pour chaque événement exposé par votre classe. . Cela permet de réduire l'empreinte de votre classe si elle contient un grand nombre d'événements qui n'auront pas toujours un abonné. (http://msdn.microsoft.com/en-us/library/8843a9ch.aspx) (http://msdn.microsoft.com/en-us/library/system.componentmodel.component.events.aspx) –
Regardez dans Ninjects Extension du MessageBroker, et sur l'indice changé soulever un événement publié, et abonnez-vous à l'événement du côté du formulaire.
Le messagebroker est plutôt utile dans la plupart des cas.
Une autre idée serait de mettre en œuvre un modèle d'observateur et d'ajouter le formulaire en tant qu'observateur à l'événement controls.
- 1. événements de contrôle des enfants à l'intérieur contrôle personnalisé
- 2. Abonnez-vous aux événements du bouton dans un contrôle personnalisé
- 3. C# contrôle personnalisé redraw lent
- 4. C# contrôle utilisateur comme un panneau personnalisé
- 5. Événements de contrôle personnalisés en C#
- 6. C# Création d'un contrôle personnalisé
- 7. Créer un contrôle personnalisé?
- 8. C# - Silverlight - Contrôle personnalisé ou UserControl?
- 9. Hébergement contrôle personnalisé dans DataGridView - C# WinForm
- 10. Comment puis-je gérer les événements dans le contrôle personnalisé C# wpf
- 11. Contrôle personnalisé dans NSCollectionViewItem
- 12. contrôle personnalisé dans Asp.net
- 13. Plusieurs modèles de contrôle pour un contrôle personnalisé dans Silverlight
- 14. Élever un événement dans un contrôle personnalisé
- 15. C#: rotation du texte dans un contrôle personnalisé
- 16. Quand déclencher un événement de contrôle personnalisé?
- 17. Contrôles enfants à double tampon dans un contrôle personnalisé (C#)
- 18. Plusieurs NSButtonCells encastrées dans un contrôle personnalisé
- 19. Propriétés de groupe dans un contrôle personnalisé
- 20. Événements de contrôle retardés
- 21. OnValidation d'un événement dans un contrôle personnalisé
- 22. Événements de contrôle utilisateur
- 23. Possibilité d'avoir un contrôle interne sur un contrôle serveur personnalisé?
- 24. Contrôle personnalisé dans Silverlight ListBox
- 25. comment créer un contrôle personnalisé dans ASP.NET?
- 26. Capture Click Click dans un contrôle personnalisé
- 27. créer un contrôle personnalisé dans l'iphone
- 28. Contrôle du rendu d'un contrôle personnalisé
- 29. État du contrôle de contrôle personnalisé ASP.NET
- 30. Contrôle de l'assistant personnalisé
I trouvez mieux cette approche car il semble que l'événement soit déclenché par 'this' au lieu d'un contrôle" inconnu "quelque part dans un autre contrôle, ce qui arrive si vous faites juste' listBox1.SelectedIndexChanged + = value' dans votre contrôle utilisateur. – Patrick
Merci. Cela a fonctionné parfaitement. – Wildhorn