Menu contextuel sur textbox

Résolu
cs_DAN1 Messages postés 78 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 19 juillet 2017 - 31 mars 2017 à 10:34
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 - 9 avril 2017 à 13:55
Bonjour à tous.
Comment peut-on imaginer de programmer l'utilisation d'un seul et unique menu contextuel applicable à plusieurs textboxe.
Je m'explique :
mon menu contextuel contient couper, copier, coller.
J'ai trois textboxe ou plus et je ne veux pas être contraint de créer autant de menu contextuel que de textbox et d'économiser un maximum de lignes de programmation.
Je suppose qu'il existe une instruction permettant d'identifier le nom du contrôle lors du passage de la souris.
Qu'en pensez-vous.
D'avance merci de votre aide

--

12 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
31 mars 2017 à 10:59
Bonjour,

dans tes précédents post tu programmes en VB.Net. Donc le control TextBox a les copier, coller et couper en menu contextuel.
Je ne comprends donc pas ta question, a moins que ce soit du vba, tu ne l'as pas spécifié!
0
cs_DAN1 Messages postés 78 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 19 juillet 2017 3
31 mars 2017 à 13:48
Bonjour Le Pivert .
Merci de ta réponse il s'agit bien là de programmation en VB. net.
Je veux pouvoir faire un clic droit sur mon textbox , ouvrir le menu contextuel avec mes menus copier couper coller.
Ça je sais le faire mais comme j'ai plusieurs textbox je ne veux pas avoir à créer autant de menu contextuel et pouvoir utiliser un seul menu contextuel pour plusieurs textbox.
Pour cela il faut selon moi que j'identifie et récupère le nom de ma textboxx me qu'en penses-tu ?
A+.
Dan

--
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
Modifié le 31 mars 2017 à 14:29
Je ne te comprends toujours pas!
Tu n'as pas besoin de créer de menu contextuel pour une Textbox, il y est nativement.
Explique alors ce que tu as crée en présentant ton code.
On pourra peut-être mieux comprendre ton besoin.

Pour ce qui est de parcourir tous les TextBox, une recherche sur Google te l'indique:

parcourir control en VB.NET

http://pise.info/vb-net/06.htm

par exemple

@+ Le Pivert
0
cs_DAN1 Messages postés 78 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 19 juillet 2017 3
31 mars 2017 à 15:26
Bonjour Le Pivert
Chez moi lorsque je fais un clic droit sur ma textbox je n'ai pas de menu qui apparaît pour copier coller…
peut-être faut-il aller dans les propriétés pour que cela apparaisse mais dans ce cas je ne vois pas où.
Il y a bien la zone contextmenustrtip mais pour cela il faut avoir créé un menu contextuel auparavant.
J'ai bien compris où était mon erreur puisque je voulais créer moi-même le menu contextuel est programmé derrière le copier, le coller…
bien à toi.
Dan
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
31 mars 2017 à 16:01
Regarde ceci

http://plasserre.developpez.com/cours/vb-net/?page=ui-winforms2#LVIII-E


Tu trouveras cela:

La propriété ShortCutsEnabled = True permet à l'utilisateur d'ouvrir un menu contextuel avec le click droit; ce menu permet les annuler, couper, copier, coller, supprimer, Sélectionner tout; ce qui peut aussi être fait avec les raccourcis clavier Shift/Inser Ctrl/Inser..

0

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

Posez votre question
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
31 mars 2017 à 18:24
Bonsoir

la solution du Pivert (que je salue) est la meilleure => y'a rien à coder!

Cependant, si tu dois faire un autre menu, ou utiliser un évènement commun à plusieurs contrôles (même de type différents) voilà la démarche.

Admettons que je veuille gérer le click d'un bouton et d'un label dans la même méthode
J'ai déjà "créé" la méthode pour le label et ci-dessous j'associe le bouton


    Private Sub Label1_Click(sender As Object, e As EventArgs) Handles Label1.Click, Button2.Click
        'sender contient l'objet qui a généré l'évènement

        Dim leSender As Control = CType(sender, Control)
        'je caste sender en tant que Control, car comme tout objet dans .Net Control dérive d'Object, et que normalement sender est un controle....
        If leSender.Name = "Label1" Then
            Dim leLable As Label = CType(sender, Label) 'comme finalement c'est un label
            leLable.Text = "coucou"
        Else
            Dim leBouton As Button = CType(sender, Button) 'en fait c'est le bouton
            MessageBox.Show("Click sur le bouton")
        End If

    End Sub

0
cs_DAN1 Messages postés 78 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 19 juillet 2017 3
31 mars 2017 à 21:08
Merci Le Pivert et merci Whismeril
Je viens de m'apercevoir que j'utilisais du RichTextBox et non pas textbox ce qui explique mon problème.Je ne vois pas d'ailleurs la raison qui m'a fait utiliser cela.

Donc je vais tout remplacer par du textbox pour avoir le menu contextuel le natif.

Par contre le code et les explications m'intéresse beaucoup

Je vous en remercie encore


--
0
cs_DAN1 Messages postés 78 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 19 juillet 2017 3
1 avril 2017 à 16:00
Bonjour.
Je reviens sur le sujet car si j'avais eu plusieurs contrôles du type RichTextBox pour lesquels j'aurais voulu utiliser un seul et unique menu contextuel comment aurais-je pu procéder pour identifier le RichTextBox sur lequel je suis afin d'effectuer un copier, un collé ou un coupé ?
Il faudrait probablement que par survol de la souris je puisse enregistrer le nom de mon contrôle et qu'ensuite en paramètre de mes copier coller ou couper je puisse agir sur ce contrôle.
Avez-vous une idée ?
D'avance merci de votre aide

--
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
1 avril 2017 à 18:22
un menu génère des événements, en particulier Click.
Donc voir ma réponse précédente
0
cs_DAN1 Messages postés 78 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 19 juillet 2017 3 > Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024
Modifié le 1 avril 2017 à 19:21
Bonsoir Whismeril.
Merci de ton message
J'ai bien regardé ce que tu m'avais envoyé et je l'ai testé,
cela ne correspond pas exactement à ce que je cherche.

Dans ton exemple il s'agit de label1
prenons donc cet exemple mais pour moi il y a :
label1
label2
label3
je crée un menu contextuel et un seul, je veux qu'il puisse s'appliquer en clic droit à ces trois contrôles label que j'ai créés.
Il faut donc que je puisse reconnaître sur lequel de ces trois label j'ai fait un clic droit.
Je suppose qu'avec le survol de la souris cela doit pouvoir se faire mais qu'elle est l'instruction à utiliser ?
Ensuite il faut que je donne en paramètre le nom de ce contrôle pour qu'il fasse bien le copier ou le coller ou le couper… sur le bon label.

Dans ton exemple le contrôle label1 est indiqué en dur.
Donc pour résumer mes questions :
comment récupérer le nom du contrôle lors du passage de la souris sur ce contrôle.
Comment appliquer mes instructions coupaient copier ou coller de mon ne menu contextuel en lui indiquant le nom de ce contrôle dans le paramètre de mon instruction.
Tout cela dans le but d'économiser du code et de la programmation.
En te remerciant encore de ton aide
A+.
Dan
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656 > cs_DAN1 Messages postés 78 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 19 juillet 2017
1 avril 2017 à 19:28
Il faut donc que je puisse reconnaître sur lequel de ces trois label j'ai fait un clic droit.

Pour ça y'a rien à faire, il suffit de déclarer ce menu comme étant le menu contextuel de tes contrôles.

Et le reste tu le gères dans les évènements Click de "Copier", de "Coller" etc...
0
cs_DAN1 Messages postés 78 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 19 juillet 2017 3
Modifié le 5 avril 2017 à 21:44
Bonjour Le Pivert et i Whismeril

Avec tout ce que vous avez indiqué et les exemples juin j'ai fait un petit programme avec menu contextuel sur des labels ,picturebox .... voici un petit exemple j'aimerais avoir votre avis car je crois avoir fait une bonne économie en ligne de programmation.
J'ai d'ailleurs découvert que event contient le nom de l'événement sur lequel l'action a été déclenchée.
Cela m'ouvre d'ailleurs de nouvelles perspectives.
En tout cas merci de me donner votre avis.
A+.
Dan
pi
Imports VB = Microsoft.VisualBasic
 
Public Class Form1
    Dim leSender As Control
    Dim leLable As Label
    Dim RichTextBox As RichTextBox
    Dim send
    Dim labelc
    Dim labelv = ""
    Dim gen
    
    Private Sub RichTextBox1_MouseHover(sender As Object, e As System.EventArgs) Handles RichTextBox1.MouseHover
       RichTextBox)
        gen = sender
    End Sub
    Private Sub COLERToolStripMenuItem_Click(sender As Object, e As System.EventArgs) Handles COLERToolStripMenuItem.Click
        gen.Text = labelv
    End Sub

    Private Sub Label1_MouseHover(sender As Object, e As System.EventArgs) Handles Label1.MouseHover       
        gen = sender
    End Sub

    Private Sub Label2_MouseHover(sender As Object, e As System.EventArgs) Handles Label2.MouseHover
        gen = sender
    End Sub
    Private Sub COPIERToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles COPIERToolStripMenuItem.Click
        labelv = gen.Text
    End Sub

    Private Sub RichTextBox2_MouseHover(sender As Object, e As System.EventArgs) Handles RichTextBox2.MouseHover
        RichTextBox)
        gen = sender
    End Sub

    Private Sub TextBox1_MouseHover(sender As Object, e As System.EventArgs) Handles TextBox1.MouseHover
              gen = sender
    End Sub
 
End Class

--
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
5 avril 2017 à 21:35
Bonsoir

Je ne peux pas tester ton code, j'ai pas de pc sous la main au moins jusqu'à demain soir.
Mais juste à la lecture, j'ai trois questions:
  • pourquoi t'embêtes tu avec la variable gen, il existe une propriété du menu qui retourne qui l'a appelé: https://msdn.microsoft.com/en-us/library/system.windows.forms.contextmenustrip.sourcecontrol(v=vs.110).aspx , plus haut je t'ai peut être embrouillé en te disant qu'avec sender t'aurais l'info, ce qui n'est pas le cas, mais l'idée que j'exprimais, à savoir qu'un menu (pas le menuitem) sait qui l'appelle est exacte.
  • pourquoi ne te sers tu pas du presse papier, du coup tu ne peux copier/coller que depuis et vers les 3 contrôles que tu as prévu. En te servant du presse papier, tu pourrais aussi vers d'autre logiciels.
  • A quoi te sert l'import Vb, c'est une pratique déconseillée, en effet, c'est mettre du vb6 dans vb.net, ça plante parfois et c'est assez compliqué de trouver le bug. En enlevant cet import et en utilisant l'objet .net adéquat, tu retires ce risque
0
cs_DAN1 Messages postés 78 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 19 juillet 2017 3 > Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024
6 avril 2017 à 13:59
Bonjour Whismeril .
Merci de ton message.
Tu as effectivement raison, je ne sais pas pourquoi j'ai fait cette import qui ne serre à rien.
Tu as également raison pour l'utilisation du presse-papier mais dans ce cas précis je voulais surtout tester les copier coller en interne au niveau des contrôles et cela fonctionne parfaitement chez moi.
J'ai regardé attentivement l'exemple du lien que tu m'as indiqué mais je n'ai pas réussi à le tester car je ne sais pas quelle action permets de déclencher ce code.
Du coup je n'ai pas pu trouver la propriété du menu qui me permettrait de ne pas utiliser la variable gen.
Peux-tu m'éclairer à ce sujet ?
Je te remercie encore.
A+.
Dan
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656 > cs_DAN1 Messages postés 78 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 19 juillet 2017
6 avril 2017 à 14:25
Oui, je te fais ça dès que je peux, probablement pas avant demain après midi.
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
7 avril 2017 à 08:20
Bonjour

j'ai créé un menu qui s'appelle mnuContextMenu, avec 2 items, mnuCopier et mnuColler.
Je l'ai affecté à 2 textBox et un Label

    Private Sub mnuCopier_Click(sender As Object, e As EventArgs) Handles mnuCopier.Click
        Dim monControle As Control = CType(mnuContextMenu.SourceControl, Control) 'recupère le controle qui a ouvert le menu
        Clipboard.SetData(DataFormats.Text, monControle.Text) 'charge le presse papier
    End Sub

    Private Sub mnuColler_Click(sender As Object, e As EventArgs) Handles mnuColler.Click
        Dim monControle As Control = CType(mnuContextMenu.SourceControl, Control)
        monControle.Text = Clipboard.GetText() 'décharge le presse papier
        Clipboard.Clear() 'vide le presse papier pour bien vérifier que Coller n'est actif que s'il y a quelque chose dedans, toi tu feras comme tu veux
    End Sub

    Private Sub mnuContextMenu_Opening(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles mnuContextMenu.Opening
        mnuColler.Enabled = Clipboard.ContainsText() 'le menu Coller est activé s'il y a du texte dans le presse papier
    End Sub

0
cs_DAN1 Messages postés 78 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 19 juillet 2017 3
7 avril 2017 à 15:46
Bonjour Whismeril.

J'ai aussitôt testé ton code qui marche nickel à l'exception de la partie suivante
Bonjour.

Private Sub mnuContextMenu_Opening(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles mnuContextMenu.Opening
mnuColler.Enabled = Clipboard.ContainsText() 'le menu Coller est activé s'il y a du texte dans le presse papier
End Sub



--Je n'aurais donc pas à créer des contrôles moushover avec la solution que tu me proposes, c'est un net avantage si l'on a beaucoup de contrôle à inclure dans le menu.
Je te joins une copie d'écran d'erreur sur le contrôle mnuContextMenu_Opening Pour que tu me donnes ton avis.
En te remerciant encore du temps tu as tu as bien voulu me consacrer.
A+.
Dan
0
cs_DAN1 Messages postés 78 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 19 juillet 2017 3
7 avril 2017 à 15:53
J'avais oublié de joindre une copie d'écran d'erreur.


A+.
Dan


--
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
7 avril 2017 à 23:11
Est ce que chez toi le menu ne s’appellerait pas COLERToolStripMenuItem?
0
cs_DAN1 Messages postés 78 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 19 juillet 2017 3
8 avril 2017 à 12:31
Bonjour Whismeril
Non mon menu s'appelle
mnuContextMenu les copier et coller du menu me renvoie à :
COLERToolStripMenuItem
et COPIERToolStripMenuItem qu'en penses-tu ?
Merci de ton aide encore une fois.
Dan










--
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
8 avril 2017 à 13:33
COLERToolStripMenuItem.Enabled peut être?
0
cs_DAN1 Messages postés 78 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 19 juillet 2017 3 > Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024
9 avril 2017 à 13:25
bonjour Whismeril
oui c'est bien COLERToolStripMenuItem.Enabled
merci beaucoup
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
9 avril 2017 à 13:55
De rien
0
Rejoignez-nous