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

Windows Forms Discussion :

Parcours (foreach) de chaque composant de la form


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 133
    Points : 57
    Points
    57
    Par défaut Parcours (foreach) de chaque composant de la form
    Salut à tous,

    Je dois parcourir chaque composant de la form, pour modifier le champ Text dynamiquement.

    J'utilise cette fonction:

    foreach (Control c in control.Controls) {}
    de façon récursive.


    Ca fonctionne pour les Labels, TabPage...

    Par contre, je n'arrive pas à acceder aux menus (toolStripMenu, toolStripButton), savez-vous svp comment je peux parcourir d'un coup tous les élements de tous les menus et treeview ?



    Merci d'avance

  2. #2
    Membre actif
    Inscrit en
    Octobre 2007
    Messages
    236
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2007
    Messages : 236
    Points : 233
    Points
    233
    Par défaut
    Les controles dites Containers sont des objets conteneurs donc tu dois leurs associés des boucles foreach pour parcourir les controles contenus!
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
                foreach(Control c in this.Controls) {
                    if(c.GetType() == typeof(GroupBox)) {
                        foreach(Control cc in c.Controls) {
                            // ...
                        }
                    } else if(c.GetType() == typeof(ToolStrip)) {   // ToolStrip et cousin(e)s :D
                        foreach(ToolStripItem ci in ((ToolStrip)c).Items) {
                            // ...
                        }
                    } else {
                        // Controles contenus par le formulaire
                    }
                }

  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 754
    Points
    39 754
    Par défaut
    Les ToolStripButton ou ToolStripMenuItem ne sont pas dans la collection Controls, parce que ce ne sont pas des contrôles...
    Citation Envoyé par MSDN
    Inheritance Hierarchy
    System.Object
    System.MarshalByRefObject

    System.ComponentModel.Component

    System.Windows.Forms.ToolStripItem

    System.Windows.Forms.ToolStripButton
    Je n'ai pas vu de propriété ou de méthode permettant de lister les composants autres que des contrôles...

  4. #4
    Membre du Club
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 133
    Points : 57
    Points
    57
    Par défaut
    Merci pour vos réponses,

    Idem, je n'ai pas trouvé.

    J'utilise alors une solution qui fonctionne, mais je dois executer une fonction sur chaque menu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    public void translateControls(Control control)
            {
                foreach (Control c in control.Controls)
                {
                    if (
                        c.GetType() == typeof(Label) ||
                        c.GetType() == typeof(TabPage)
                    )
                    {
                        /* ***** */
                        if (c.Text.Contains("%"))
                        {
                            string code = c.Text.Trim('%');
                            string translation = getString(code);
                            if (translation != null)
                            {
                                c.Text = translation;
                            }
                        }
                    }
     
                    if (c.Controls.Count > 0) translateControls(c);
     
     
                }
            }
     
     
     
            public void translateMenu(ToolStripItemCollection items)
            {
     
                for (int i = 0; i < items.Count; i++)
                {
                    if (
                        items[i].GetType() == typeof(ToolStripMenuItem) ||
                        items[i].GetType() == typeof(ToolStripButton))
                    {
                        if (items[i].Text.Contains("%"))
                        {
                            string code = items[i].Text.Trim('%');
                            string translation = getString(code);
                            if (translation != null)
                            {
                                items[i].Text = translation;
                            }
                        }
     
                        // Récursif
                            // Items de menu
                            if (items[i].GetType() == typeof(ToolStripMenuItem) && ((ToolStripMenuItem)items[i]).DropDownItems.Count > 0) translateMenu(((ToolStripMenuItem)items[i]).DropDownItems);
                    }
                }
     
            }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#][VS2005] centrer composants dans une form
    Par camilero dans le forum Windows Forms
    Réponses: 10
    Dernier message: 06/07/2006, 11h48
  2. Réponses: 2
    Dernier message: 06/06/2006, 08h32
  3. [C#]composant d 1 form windows
    Par cleaver dans le forum Windows Forms
    Réponses: 2
    Dernier message: 25/04/2006, 14h21
  4. composant visible sans forme précise. Avez vous un miracle ?
    Par yoghisan dans le forum Composants VCL
    Réponses: 5
    Dernier message: 10/02/2004, 00h29
  5. Envoie d'un message a TOUS les composant d'une form
    Par chddv dans le forum Composants VCL
    Réponses: 7
    Dernier message: 15/09/2003, 09h47

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