ContextMenuStrip texte de la cellule cliqué

Eraaz
Messages postés
48
Date d'inscription
mercredi 26 décembre 2012
Statut
Membre
Dernière intervention
22 novembre 2015
- 5 juil. 2014 à 22:32
Whismeril
Messages postés
17663
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
14 août 2022
- 6 juil. 2014 à 22:00
Bonjour, je cherche a avoir le texte de la cellule cliqué je n'ai pas réussi a la trouvé la propriété.
Merci

15 réponses

Whismeril
Messages postés
17663
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
14 août 2022
612
6 juil. 2014 à 09:41
Bonjour,

ta question manque un peu de précision, il n'y a pas de cellules dans un contextMenuStrip, mais des menus.
Alors si c'est le texte d'un menu que tu veux alors c'est comme ça:

L'événement Click de ces 3 menus est abonné à la méthode en dessous

Je me sers de l'objet sender, casté en control pour en obtenir la propriété Text
        private void menuToolStripMenuItem_Click(object sender, EventArgs e)
        {
           string monTexte = ((Control)sender).Text;
        }

0
Eraaz
Messages postés
48
Date d'inscription
mercredi 26 décembre 2012
Statut
Membre
Dernière intervention
22 novembre 2015

6 juil. 2014 à 13:13
Salut ! Merci pour ta réponse.
Alors oui c'est ca que je voulais faire, par contre ton code ne marche pas j'ai du le modifier donc ca donne ça :

string monTexte = ((ToolStripMenuItem)sender).Text;


Mais moi j'utilise l'événement Click pour tout le contextmenustrip et la ca ne marche pas.
0
Whismeril
Messages postés
17663
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
14 août 2022
612
6 juil. 2014 à 13:42
J'ai transformé ton commentaire (qui est plutôt destiné à la digression sur une réponse) en réponse.
Et plus bas je réponds
0
Whismeril
Messages postés
17663
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
14 août 2022
612
6 juil. 2014 à 13:56
Mais moi j'utilise l'événement Click pour tout le contextmenustrip et la ca ne marche pas.
C'est normal, par comparaison, si tu as un bouton sur une form et que tu mets le code dans l'événement Click de la form, il ne s'exécutera pas quand tu cliqueras sur le bouton.

Il faut que tu abonnes l'événement Click de chaque ToolStripMenuItem de ton contextmenustrip.
tu peux le faire par le code comme ça:
            foreach (ToolStripMenuItem item in contextMenuStrip1.Items)
                item.Click += new EventHandler(menuToolStripMenuItem_Click);

0
Eraaz
Messages postés
48
Date d'inscription
mercredi 26 décembre 2012
Statut
Membre
Dernière intervention
22 novembre 2015

6 juil. 2014 à 14:23
Le probleme c'est que je ne peux pas faire l'événement Click de chaque ToolStripMenuItem car les items sont ajoutés a l'ouverture de ma form
0
Whismeril
Messages postés
17663
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
14 août 2022
612
6 juil. 2014 à 14:28
Je me'n doutais, pourquoi t'avoir mis le code qui abonne les événements avec une boucle sinon?
0
Eraaz
Messages postés
48
Date d'inscription
mercredi 26 décembre 2012
Statut
Membre
Dernière intervention
22 novembre 2015

6 juil. 2014 à 14:46
J'ai essayé de faire plusieurs choses mais impossible, j'ai quelque chose qui ressemble a ca
http://prntscr.com/3zx3rq
0
Whismeril
Messages postés
17663
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
14 août 2022
612
6 juil. 2014 à 14:54
Ce serais bien que tu utiles le bouton répondre quand tu réponds et non les commentaires, si la discussion se prolonge se sera illisible sinon.

Merci de poster le code sur le forum, c'est mieux pour les copier coller. Voir ici comment utiliser la coloration syntaxique.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril
Messages postés
17663
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
14 août 2022
612
6 juil. 2014 à 14:56
Quand à ton image, tu veux abonner les événements click dans la procédure à abonner ça ne peut pas marcher.
AU chargement de ton formulaire, juste après avoir créer tes menus (ou au moment de les créer, il faudrait que tu mettes le code pour que je puisse te dire), c'est là qu'il faut abonner les événements à ta procédure.
0
Eraaz
Messages postés
48
Date d'inscription
mercredi 26 décembre 2012
Statut
Membre
Dernière intervention
22 novembre 2015

6 juil. 2014 à 15:05
Ok donc la j'ai mis le code au moment ou je créer les items ca donne ca :

private void test()
        {
            
            using (FtpConnection ftp = new FtpConnection(Properties.Settings.Default.ip, "", ""))
            {

                ftp.Open();
                ftp.Login();

                if (ftp.DirectoryExists("/dev_hdd0/GAMES"))
                    ftp.SetCurrentDirectory("/dev_hdd0/GAMES");

                foreach (var dir in ftp.GetDirectories("/dev_hdd0/GAMES"))
                {
                    if (dir.Name.Length > 4)
                    {
                        string s = dir.Name;

                        foreach (ToolStripMenuItem item in contextMenuStrip1.Items)
                            item.Click += new EventHandler(contextMenuStrip1_Click);
                        {
                            contextMenuStrip1.Items.Add(s);
                        }
                    }
                }
            }
        }


Mais j'ai toujours une erreur
0
Whismeril
Messages postés
17663
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
14 août 2022
612
6 juil. 2014 à 15:24
Ok

on décompose

 using (FtpConnection ftp = new FtpConnection(Properties.Settings.Default.ip, "", ""))
            {

                ftp.Open();
                ftp.Login();

                if (ftp.DirectoryExists("/dev_hdd0/GAMES"))
                    ftp.SetCurrentDirectory("/dev_hdd0/GAMES");
//jusqu'ici tu te connectes à ton serveur ftp et tu récupères une liste de répertoire

                foreach (var dir in ftp.GetDirectories("/dev_hdd0/GAMES"))
                {
                    if (dir.Name.Length > 4)
                    {
                        string s = dir.Name;
//là avec une boucle tu va parcourir ces répertoires et ne traiter que ceux dont la taille dépasse 4 caractères

foreach (ToolStripMenuItem item in contextMenuStrip1.Items)
                            item.Click += new EventHandler(contextMenuStrip1_Click);//maintenant tu abonnes des objets que tu n'as pas encore créé.

                        {
                            contextMenuStrip1.Items.Add(s);//et maintenant tu ajoutes tes menus.
                        }


            


donc c'est bien là qu'il faut agir, mais dans le bon sens

                foreach (var dir in ftp.GetDirectories("/dev_hdd0/GAMES"))
                {
                    if (dir.Name.Length > 4)
                    {
                          ToolStripMenuItem nouveau = new ToolStripMenuItem(dir.Name);//je crée un menu avec le nom du répertoire
                          contextMenuStrip1.Items.Add(nouveau);//j'ajoute le menu au contextmenu
                          nouveau.Click+= new EventHandler(menuToolStripMenuItem_Click);//j'abonne ce menu à la bonne méthode, pas la meme que le click du contexte menu, sinon ça plantera à nouveau
                   }
               }


0
Eraaz
Messages postés
48
Date d'inscription
mercredi 26 décembre 2012
Statut
Membre
Dernière intervention
22 novembre 2015

6 juil. 2014 à 15:31
D'accord j'essaye avec ton code mais j'ai une erreur ici :

(menuToolStripMenuItem_Click)


C'est une erreur d'événement non ?
0
Whismeril
Messages postés
17663
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
14 août 2022
612
6 juil. 2014 à 15:43
Et c'est quoi le texte de l'erreur?
0
Eraaz
Messages postés
48
Date d'inscription
mercredi 26 décembre 2012
Statut
Membre
Dernière intervention
22 novembre 2015

6 juil. 2014 à 15:48
Le nom "(menuToolStripMenuItem_Click)" n'existe pas dans le contexte actuel
0
Whismeril
Messages postés
17663
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
14 août 2022
612
6 juil. 2014 à 16:38
Oui c'est le nom de ma méthode, que j'ai essayé chez moi....(voir ce message)
Je n'ai pas mis le tien pour bien appuyer le fait qu'il doit s'agir d'une méthode différente de celle qui est abonnée au click du contextmenustrip
0
Eraaz
Messages postés
48
Date d'inscription
mercredi 26 décembre 2012
Statut
Membre
Dernière intervention
22 novembre 2015

6 juil. 2014 à 16:44
Bon j'ai fais ca :

 foreach (var dir in ftp.GetDirectories("/dev_hdd0/GAMES"))
                {
                    if (dir.Name.Length > 4)
                    {
                        ToolStripMenuItem nouveau = new ToolStripMenuItem(dir.Name);//je crée un menu avec le nom du répertoire
                        contextMenuStrip1.Items.Add(nouveau);//j'ajoute le menu au contextmenu
                        nouveau.Click += new EventHandler(contextMenuStrip1_Click);//j'abonne ce menu à la bonne méthode, pas la meme que le click du contexte menu, sinon ça plantera à nouveau
                    }
                }


Je n'ai pas d'erreur, par contre après comment je peux avoir le texte du menu cliqué ?
0
Whismeril
Messages postés
17663
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
14 août 2022
612
6 juil. 2014 à 16:48
Et bien tu mets ce code
string monTexte = ((ToolStripMenuItem)sender).Text;
dans la méthode que tu as abonné.
0
Eraaz
Messages postés
48
Date d'inscription
mercredi 26 décembre 2012
Statut
Membre
Dernière intervention
22 novembre 2015

6 juil. 2014 à 16:50
Donc j'ai fais ca :

foreach (var dir in ftp.GetDirectories("/dev_hdd0/GAMES"))
                {
                    if (dir.Name.Length > 4)
                    {
                        ToolStripMenuItem nouveau = new ToolStripMenuItem(dir.Name);//je crée un menu avec le nom du répertoire
                        contextMenuStrip1.Items.Add(nouveau);//j'ajoute le menu au contextmenu
                        nouveau.Click += new EventHandler(contextMenuStrip1_Click);//j'abonne ce menu à la bonne méthode, pas la meme que le click du contexte menu, sinon ça plantera à nouveau
                        string monTexte = ((ToolStripMenuItem)sender).Text;
                        MessageBox.Show(monTexte);
                    }
                }


Mais j'ai une erreur sur le sender :/
0
Whismeril
Messages postés
17663
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
14 août 2022
612
6 juil. 2014 à 17:01
J'ai dit dans la méthode que tu as abonné.
Pas dans la méthode ou tu crées l'abonnement.

En mode création, quand tu double cliques sur un bouton, Visual Studio t'envoies dans une méthode toute neuve ou tu mets le code dont tu as besoin quand l'utilisateur cliquera sur le bouton. Et sans sans que tu t'en aperçoive, Visual studio écrit pour toi, le code d'abonnement dans le fichier NomDeMaForm.Designer.cs

Si tu ouvres ce fichier tu verras tout le descriptif de ta form.

La il faut faire de même, à un endroit tu crées te menu et abonne un événement à une méthode spécifique.
C'est dans cette méthode et pas ailleurs que tu dois mettre le code dont tu as besoin pour extraire le texte .

Relis ma première réponse, il y a une méthode dédiée, avec en paramètre un object senseur.
0
Eraaz
Messages postés
48
Date d'inscription
mercredi 26 décembre 2012
Statut
Membre
Dernière intervention
22 novembre 2015

6 juil. 2014 à 17:15
Je l'ai mis dans cet événement :

private void contextMenuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            string monTexte = ((Control)sender).Text;
            MessageBox.Show(monTexte);
        }


Pas d'erreur mais le messagebox est vide
0
Whismeril
Messages postés
17663
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
14 août 2022
612
6 juil. 2014 à 18:10
Est tu bien sûr que seul les menuitems sont abonnés à cette méthode?
0
Eraaz
Messages postés
48
Date d'inscription
mercredi 26 décembre 2012
Statut
Membre
Dernière intervention
22 novembre 2015

6 juil. 2014 à 18:28
Je comprends par trop l'histoire d'abonnés
0
Whismeril
Messages postés
17663
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
14 août 2022
612
6 juil. 2014 à 18:35
C'est la base de la programmation objet.
Il va te falloir les réviser ou les apprendre si tu veux aller plus loin.

Chaque objet envoie des événements à qui veut l'entendre, mais encore faut il que quelque chose écoute.
0
Eraaz
Messages postés
48
Date d'inscription
mercredi 26 décembre 2012
Statut
Membre
Dernière intervention
22 novembre 2015

6 juil. 2014 à 18:54
C'est juste que j'emploi pas souvent ce genre de vocabulaire
0
Whismeril
Messages postés
17663
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
14 août 2022
612
6 juil. 2014 à 19:56
0
Eraaz
Messages postés
48
Date d'inscription
mercredi 26 décembre 2012
Statut
Membre
Dernière intervention
22 novembre 2015

6 juil. 2014 à 20:29
Donc ce code :

string test = ((ToolStripMenuItem)sender).Text;
            MessageBox.Show(test);


il faudrait le mettre ou parce que le messagebox est vide
0
Whismeril
Messages postés
17663
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
14 août 2022
612
6 juil. 2014 à 22:00
ceci au moment de l'initialisation (le tableau simule la connexion à ton ftp) Attention c'est avec mes noms de contrôle et de méthode.
            string[] noms = { "nom 1", "nom 2", "nom 3" };

            foreach (string n in noms)
            {
                ToolStripMenuItem nouveau = new ToolStripMenuItem(n);
                contextMenuStrip1.Items.Add(nouveau);
                nouveau.Click += new EventHandler(menuToolStripMenuItem_Click);
            }


et la méthode menuToolStripMenuItem_Click
        private void menuToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string monTexte = ((ToolStripMenuItem)sender).Text;
            MessageBox.Show(monTexte);
        }


Ça fonctionne chez moi.

je te conseille de mettre un point d'arrêt à l'initialisation pour voir si les dir.Name ne sont pas vides; et un autre dans la méthode pour regarder le contenu des variables

0