J'ai un formulaire MainForm
qui est un formulaire Windows Forms qui contient de nombreux contrôles enfants. Je veux appeler une fonction sur MainForm
qui avertit tous ses enfants. Le formulaire Windows Forms fournit-il un moyen de le faire? J'ai joué avec mise à jour, rafraîchir et invalider sans succès.Notifier récursivement les contrôles enfants via C#
Répondre
foreach (Control ctrl in this.Controls)
{
// call whatever you want on ctrl
}
Si vous souhaitez accéder à tous les contrôles du formulaire, ainsi que tous les contrôles de chaque contrôle sur le formulaire (et ainsi de suite, récursive), utiliser une fonction comme ceci:
public void DoSomething(Control.ControlCollection controls)
{
foreach (Control ctrl in controls)
{
// do something to ctrl
MessageBox.Show(ctrl.Name);
// recurse through all child controls
DoSomething(ctrl.Controls);
}
}
... que vous appelez en passant d'abord dans la collection de contrôles de la forme, comme ceci:
DoSomething(this.Controls);
Je voudrais mettre en œuvre DoSomething dans une interface comme "ICanDoSomething" et prrof cette interface dans le foreach. Vous devez donc ajouter uniquement cette interface pour chaque contrôle. –
Non, il n'y en a pas. Vous devez sortir le vôtre. Sur une note de côté - WPF a "routé des événements" qui est exactement cela et plus encore.
vous allez avoir besoin d'une méthode récursive pour le faire (comme ci-dessous), parce que les contrôles peuvent avoir des enfants.
void NotifyChildren(control parent)
{
if (parent == null) return;
parent.notify();
foreach(control child in parent.children)
{
NotifyChildren(child);
}
}
Quelle langue est-ce? – MusiGenesis
comme le dit le titre de la question, c'est C# –
Les contrôles dans WinForms n'ont pas de collection "enfants". – MusiGenesis
La réponse de MusiGenesis est élégante, (typique d'une bonne manière), agréable et propre.
Mais juste pour offrir une alternative en utilisant des expressions lambda et une « action » pour un autre type de récursion:
Action<Control> traverse = null;
//in a function:
traverse = (ctrl) =>
{
ctrl.Enabled = false; //or whatever action you're performing
traverse = (ctrl2) => ctrl.Controls.GetEnumerator();
};
//kick off the recursion:
traverse(rootControl);
- 1. Linq-to-Sql: obtenir récursivement des enfants
- 2. C# usercontrol comment accéder à tous les contrôles enfants
- 3. Surligner simultanément deux contrôles enfants
- 4. Contrôles enfants à double tampon dans un contrôle personnalisé (C#)
- 5. Espacement entre les contrôles enfants dans WPF Grid
- 6. Erreur d'analyseur lors de la tentative d'envelopper les contrôles enfants
- 7. Comment peindre des zones transparentes pour les contrôles enfants?
- 8. Dessiner l'image au-dessus des contrôles enfants
- 9. Comment définir le thème des contrôles enfants avec Infragistics?
- 10. C# SelectSingleNode - Peut-il être utilisé récursivement?
- 11. Notifier lors d'erreurs graves sur les journaux
- 12. Notifier les messages d'icônes n'impressionnera pas MsgWaitForMultipleObjectsEx
- 13. ASP.NET MVC Data Feedback via les contrôles utilisateur
- 14. Comment parcourir XPath récursivement?
- 15. comment remplacer les noms récursivement via l'opération de traitement par lots Windows
- 16. XBAP Exception Notifier
- 17. Comment empêcher un contrôle Web de charger des contrôles enfants?
- 18. WPF: comment hériter les valeurs de propriété de tous les contrôles enfants?
- 19. Notifier les changements de propriété pour les données de base?
- 20. Référence aux contrôles via la fonction javascript
- 21. C# & Win32 notifier quand une fenêtre séparée est fermée/fermée
- 22. PHP regex correspondant récursivement
- 23. Notifier objet conteneur: bonnes pratiques
- 24. Comment masquer les formulaires enfants mdi dans C# .net?
- 25. Attribut HTML 'name' généré pour les contrôles enfants ASP.net, au lieu de l'attribut unique 'ID'
- 26. Désactivation de tous les contrôles enfants sauf un dans une fenêtre WPF
- 27. Le modèle correct pour transmettre des données aux contrôles enfants dans un contrôle serveur
- 28. Notifier l'application à partir de SqlServer
- 29. Notifier le thread parent lorsque l'enfant a effectué une certaine action [C#]
- 30. Rechercher tous les contrôles ASP.NET correspondant à un prédicat?
Que voulez-vous dire par « informer »? –