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 :

Parser tous les menuitem


Sujet :

Windows Forms

  1. #1
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 388
    Points : 2 999
    Points
    2 999
    Par défaut Parser tous les menuitem
    Bonjour,

    J'ai besoin de parser tous les item d'un MenuStrip mais je n'arrive pas à trouver la manière de le faire :-(

    Je sais qu'il faut faire une fonction récursive mais cette fonction devrait prendre en paramètre le menustrip lui-même et du coup, je sais pas comment me positionner sur chaque menuitem à vérifier.

    Quelqu'un pourrait me donner la direction à prendre svp ?

    Merci d'avance

    Papy !

  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
    Voici un exemple pour trouver un menuitem dans arborescence :
    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
     
            public ToolStripMenuItem FindMenuItem(ToolStripMenuItem startMenu, string name)
            {
                if (startMenu.DropDownItems.Count == 0) return null;
                foreach (ToolStripMenuItem tsmi in startMenu.DropDownItems)
                {
                    if (tsmi.Name == name)
                    {
                        return tsmi;
                    }
                    if (tsmi.DropDownItems.Count > 0)
                    {
                        ToolStripMenuItem foundItem = FindMenuItem(tsmi, name);
                        if (foundItem != null)
                        {
                            return foundItem;
                        }
                    }
                }
                return null;
            }

  3. #3
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 388
    Points : 2 999
    Points
    2 999
    Par défaut
    Merci, je vais essayer de résoudre ma problématique à partir de ce code.

    Mon problème est en fait de trouver tous les menuItem pour les mettre à Enabled ou pas en fonction de la propriété Tag.
    Mon souci, c'est que que je tombe parfois sur des séparateurs et là ça plante lamentablement pour une question de transtypage.

    Je vais voir comment adapter ton code.

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    en fonction du type, tu peux faire une analyse

    Un menuItem de type barre de séparation est de type MenuSeparator

    avec un test genre : if(menuItemxx is ...) ca devrait résoudre plein de chose
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  5. #5
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 388
    Points : 2 999
    Points
    2 999
    Par défaut
    C'est effectivement ce que j'ai finis par faire en prenant en compte que les séparateurs ne sont pas des "vrais" menus.

    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
     
            private void ManageMenu(ToolStripItem menu, Boolean state)
            {
                ToolStripMenuItem _menu = menu as ToolStripMenuItem;
                if (_menu == null)
                {
                    // C'est un séparateur
                    menu.Visible = state;
                }
                else
                // C'est un vrai menu
                {
                    if (_menu.Tag == null) _menu.Visible = state;
                    foreach (ToolStripItem item in _menu.DropDownItems) ManageMenu(item, state);
                }
            }
     
            private void ouvrirToolStripMenuItem_Click(object sender, EventArgs e)
            {
                foreach (ToolStripItem item in mainMenuStrip.Items) ManageMenu(item, true);
            }
     
            private void fermerToolStripMenuItem_Click(object sender, EventArgs e)
            {
                foreach (ToolStripItem item in mainMenuStrip.Items) ManageMenu(item, false);
            }

    Merci

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/04/2009, 10h53
  2. afficher tous les champs d'une table
    Par julio84 dans le forum ASP
    Réponses: 8
    Dernier message: 19/01/2005, 10h31
  3. Réponses: 4
    Dernier message: 16/08/2003, 13h21
  4. Enlever tous les M&Mme des enregistrements
    Par marc olivier dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/07/2003, 12h24
  5. jointure renvois pas tous les enregistrements
    Par rayonx dans le forum Langage SQL
    Réponses: 7
    Dernier message: 29/08/2002, 12h51

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