Magazine Internet

Récursivité : Lister tous les controls d'un control

Publié le 02 septembre 2008 par Jeremy.jeanson

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;

Retour à La Une de Logo Paperblog

A propos de l’auteur


Jeremy.jeanson 1573 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte