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
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é!
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
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:
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
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..
Vous n’avez pas trouvé la réponse que vous recherchez ?
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
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
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
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
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
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
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
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
J'ai aussitôt testé ton code qui marche nickel à l'exception de la partie suivanteBonjour.
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
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