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 :

"Indice" du sous-menu cliqué dans un ContextMenuStrip


Sujet :

Windows Forms

  1. #21
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    ToolStripDropDownMenu est la classe mère de ContextMenuStrip, donc ça, c'est bon, tu as bien ton ContextMenu dans le Owner.

    C'est donc la conversion qui ne se fait pas.

    Et là, je t'avoue que chez moi ça passe tout seul, donc y'a pas de raison qu'avec le même code ça bug dans ton application...
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  2. #22
    Membre régulier Avatar de Tuttu
    Homme Profil pro
    Inactif
    Inscrit en
    Février 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Février 2007
    Messages : 135
    Points : 123
    Points
    123
    Par défaut
    Justement, dans mon débogueur, le Owner est reconnu comme un ToolStipDropDownMenu mais il n'a pas de nom.

    J'ai l'impression que le programme n'arrive pas à remonter l'arborescence du ContextMenu. Serait-ce dû à une mauvaise initialisation ?
    Dans ton programme, tu initialises tes items du menu de quelle façon ?

  3. #23
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Un objet n'a pas forcément besoin d'un "nom" pour exister.

    Je les ai mis directement dans le ContextMenu en passant par l'éditeur graphique.
    Je viens de tester en en ajoutant un directement dans le code, et ça passe sans souci aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ToolStripMenuItem tsmi = new ToolStripMenuItem("Test2");
    tsmi.Click += new EventHandler(testToolStripMenuItem_Click);
     
    this.contextMenuStrip1.Items.Add(tsmi);
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  4. #24
    Membre régulier Avatar de Tuttu
    Homme Profil pro
    Inactif
    Inscrit en
    Février 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Février 2007
    Messages : 135
    Points : 123
    Points
    123
    Par défaut
    Je vais changer ma façon d'ajouter les éléments au menu pour voir si ça ne vient pas de là.

    Dans mon cas, j'ai créé les premières parties de mon ContextMenu via l'éditeur graphique et je leur ai donné un nom. N'est-ce pas celui-ci que je devrais voir en tant que Owner.Name ?


    EDIT : j'ai changé la méthode de création des sous-éléments (les miens sont un peu différents des tiens, ce sont des DropDownItem et non pas des Item simple) mais ça n'a rien changé.

  5. #25
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Qu'appelle-tu les premières parties du ContextMenu ?

    Mais effectivement, si tu as créé celui-ci via l'éditeur graphique, tu devrais voir apparaître sous nom.

    Pourquoi utilise-tu des DropDownItem (que d'ailleurs je ne trouve pas sur MSDN) ?

    As-tu testé avec des ToolStripMenuItem ?
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  6. #26
    Membre régulier Avatar de Tuttu
    Homme Profil pro
    Inactif
    Inscrit en
    Février 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Février 2007
    Messages : 135
    Points : 123
    Points
    123
    Par défaut
    Par premières parties, je parle du ContextMenu en lui même et des deux ToolStripMenuItem qu'il contient.

    Ensuite, par programmation dans la boucle foreach, j'ajoute des DropDownMenuItem à un de ces ToolStripMenuItem. Ca me permet d'avoir une liste d'item accessible depuis le ToolStripMenuItem.

    Tu trouveras les DropDownItem ici.

    Et pour répondre à ta dernière question, je n'ai pas mis de ToolStripMenuItem car depuis un ToolStripMenuItem, je ne peux pas en rajouter. Donc non, je n'ai pas pu essayé.

    Si je reprends mon arborescence, j'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ContextMenu  --> ToolStripMenuItem 1 ---> DropDownItem 1
                                         ---> DropDownItem 2
                                         ---> ...
                                         ---> DropDownItem n
                 --> ToolStripMenuItem 2

  7. #27
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Ok, je pensais que tu avais les DropDowItem directement dans ton ContextMenu.

    Du coup, pour respecter l'arborescence, faut rajouter une couche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private void PoseCarte_Click(object sender, EventArgs e)
    {
        ToolStripDropDownItem tsddi = sender as ToolStripDropDownItem;
        ToolStripMenuItem TSMI = tsddi.Owner as ToolStripMenuItem;
        ContextMenuStrip id = TSMI.Owner as ContextMenuStrip;
        PictureBox id_PB = id.SourceControl as PictureBox;
    }
    J'ai pas testé mais ça devrait marcher.


    Pour les ToolStripDropDownItem, truc marrant, ils sont introuvable via une recherche MSDN.
    Et faudra que tu m'explique comment tu les instancie, sachant que c'est une classe abstraite
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  8. #28
    Membre régulier Avatar de Tuttu
    Homme Profil pro
    Inactif
    Inscrit en
    Février 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Février 2007
    Messages : 135
    Points : 123
    Points
    123
    Par défaut
    J'ai déjà testé un code comme ça (voir message plus haut) et ça ne marche pas. J'ai copié le tien pour vérifier et j'ai la même erreur :

    Impossible de convertir le type 'System.Windows.Forms.ToolStrip' en 'System.Windows.Forms.ToolStripMenuItem' via une conversion de référence, une conversion boxing, une conversion unboxing, une conversion wrapping ou une conversion null type
    Et voilà le bout de code qui rajoute chaque DropDownItem.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    foreach (Carte Ca in Main)
                {
                    ToolStripMenuItem item = new ToolStripMenuItem(Ca.GetNom(), null, PoseCarte_Click);
                    item.Tag = i;
                    poserUneCarteToolStripMenuItem.DropDownItems.Add(item);
                    i++;
                }

  9. #29
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    [Edit: Effectivement, je m'étais trompé ]
    Tu rajoute des ToolStripMenuItem et non des ToolStripDropDownItem...

    Et je viens de comprendre mon erreur, il ne faut pas passer par la propriété Owner mais par la propriété OwnerItem pour la première conversion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private void PoseCarte_Click(object sender, EventArgs e)
    {
        ToolStripMenuItem tsmiChild = sender as ToolStripMenuItem;
        ToolStripMenuItem tsmi = tsmiChild.OwnerItem as ToolStripMenuItem;
        ContextMenuStrip id = tsmi.Owner as ContextMenuStrip;
        PictureBox id_PB = id.SourceControl as PictureBox;
    }
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  10. #30
    Membre régulier Avatar de Tuttu
    Homme Profil pro
    Inactif
    Inscrit en
    Février 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Février 2007
    Messages : 135
    Points : 123
    Points
    123
    Par défaut
    Tu ne te serais pas trompé dans ta première phrase ?

    En tout cas, j'ai copié le code et je n'ai plus d'erreur d'exécution. Un grand merci à toi.

    Je me rends compte que j'avais fait la même erreur quand j'avais essayé, je n'étais pas passé par un OwerItem pour l'intermédiaire.

    Grâce à toi, je peux enfin passer mon sujet en résolu. Un grand merci.


    EDIT : finalement, il reste un problème. Le SourceControl vaut null. Tu as le même soucis chez toi ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [Joomla!] Comment un sous-menu dans Joomla qui ne s'affiche que si je clique ou survol sur son menu
    Par Amel_B dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 14/01/2012, 01h05
  2. Créer un sous menu dans le menu contextuel clique droit
    Par koKoTis dans le forum Windows XP
    Réponses: 1
    Dernier message: 11/10/2007, 12h17

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