IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Obtention de bouton en runtime


Sujet :

C#

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2007
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 401
    Points : 153
    Points
    153
    Par défaut Obtention de bouton en runtime
    Bonjour

    Dans mon application C#, j'ai un form qui possède 2 bouton: btAdd et btCancel.

    En runtime, je voudrais obtenir la liste des boutons qui se trouvent dans mon form. Pour cela, je suis en train d'utilisation la propriétés Controls. Ainsi, je fais de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
                ...
                IList ctrls = this.Controls;
                foreach (Control c in ctrls)
                {
                    if (c is Button)
                    {
                        buttons.Add(c.Name, (Button)c);
                    }
                }
                ...
    Cependant, et cela en faisant debug, j'ai constaté que la liste de controles du form est vide (bien que le form possède les 2 boutons en questions.
    En debug, le cycle est parcouru une seule foi et l'objet "c" obtenu est de type
    {System.Windows.Forms.TableLayoutPanel, BorderStyle: System.Windows.Forms.BorderStyle.None}

    En faisant un this.Controls.Count, la valeur est 0.

    Quelqu'un pour m'aider?

    merci

  2. #2
    Membre expérimenté Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Points : 1 732
    Points
    1 732
    Par défaut
    Salut,
    Déjà, copier la collection dans un IList ca ne sert à rien, parcourt directement la collection de contrôles.
    Ensuite, au moins une de tes deux affirmations est fausse.
    En effet, tu dis que Controls.Count == 0, mais que le parcourt boucle une fois, retournant un TableLayoutPanel, donc il y a un contrôle dans la collection.

    Enfin, ton problème est évident : ta form ne contient qu'un seul contrôle, un TableLayoutPanel en l'occurrence.
    Tes boutons eux, ne sont pas dans la form mais probablement plutôt dans le TableLayoutControl. Ce genre de fonction est donc souvent récursive afin de parcourir toutes les imbrications de contrôles.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Fais une méthode récursive :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    private IEnumerable<Button> GetAllButtons(Control container)
    {
        foreach (Control c in container.Controls)
        {
            if (c is Button)
                yield return (Button)c;
            foreach (Button b in GetAllButtons(c))
            {
                yield return b;
            }
        }
    }

Discussions similaires

  1. [Toolbar] Problème d'obtention des boutons
    Par mat29100 dans le forum C#
    Réponses: 8
    Dernier message: 19/05/2011, 14h03
  2. [AC-2007] Le bouton "imprimer" est grisé avec le runtime 2007
    Par aurel77310 dans le forum Runtime
    Réponses: 4
    Dernier message: 31/08/2010, 21h54
  3. [AC-2000] Barre outils et boutons de cmd ne fonctionnent pas (en Runtime)
    Par Ckikikirame dans le forum Runtime
    Réponses: 2
    Dernier message: 21/05/2009, 04h53
  4. Réponses: 7
    Dernier message: 22/07/2008, 22h55
  5. Runtime 2003 et bouton fermer
    Par seb92400 dans le forum Runtime
    Réponses: 9
    Dernier message: 18/10/2006, 14h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo