Pour faire une requête Linq sur les controls d'un formulaire il peut être pratique d'avoir sous la main une méthode qui liste l'ensemble des controls d'un formulaire. Voici le code d'une méthode d'extension qui retourne un énumérateur via yield.
/// <summary> /// Retouner une liste de tous les controls contenus dans un control sans oublier les controls enfant de ceux-ci /// </summary> /// <param name="sender"></param> /// <returns></returns> public static IEnumerable<Control> ControlsAvecRecursivite(this Control sender) { // Lister les controls enfant foreach (Control c in sender.Controls) { // Retourner le control enfant yield return c; // Pour chague control retourner ses controls enfant via l'énumération [Recursivite] foreach (Control child in c.ControlsAvecRecursivite()) { yield return child; } } }
LE code s'utilise simplement comme ceci :
Ienumerable<Control> controls = this.ControlsAvecRecursivite(); // Par exemple Pour lister les ID des contrôles Textbox d'un panel var textBoxs = from c in panel.ControlsAvecRecursivite() where c is TextBox select c.ID;