Salut à tous,
J'ai plusieurs TextBox pour lesquels certains type de contenu est interdit (des chiffres, des prix ou du textes).
J'ai, pour cela, créé un ContextMenuStrip pour le menu contextuel lors d'un click droit (copier, coller, supprimer).
J'ai écrit le code suivant pour l'évènement Opened du ContextMenuStrip:
Ensuite pour chaque bouton du ContextlenuStrip, je gère l'évènement Click
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 Private Sub cmsCopierCollerSuppr_Opened(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmsCopierCollerSuppr.Opened 'Si le presse papier contient du texte alors If My.Computer.Clipboard.ContainsText = True Then If txtMagPre.Focused = True Or txtNbreVO.Focused = True Or txtNbreVF.Focused = True Or txtVolaAcheter.Focused = True Or txtLien.Focused = True Then 'Nbre de caractère max: 75 If My.Computer.Clipboard.GetText.Length <= 75 Then tsmiColler.Enabled = True Else tsmiColler.Enabled = False End If ElseIf txtAnnee.Focused = True Then 'Pour autotiser le coller, il faut que le presse papier contienne que des chiffres et moins de 5 caractères If rgChiffre.IsMatch(My.Computer.Clipboard.GetText) = False And My.Computer.Clipboard.GetText.Length > 5 Then tsmiColler.Enabled = False Else tsmiColler.Enabled = True End If ElseIf txtVolAchete.Focused = True Then 'Pour autotiser le coller, il faut que le presse papier contienne que des chiffres et moins de 4 caractères If rgChiffre.IsMatch(My.Computer.Clipboard.GetText) = False And My.Computer.Clipboard.GetText.Length > 4 Then tsmiColler.Enabled = False Else tsmiColler.Enabled = True End If ElseIf txtPrixEdit.Focused = True Then 'Pour autotiser le coller, il faut que le presse papier contienne un prix et moins de 6 caractères If rgPrix.IsMatch(My.Computer.Clipboard.GetText) = False And My.Computer.Clipboard.GetText.Length > 6 Then tsmiColler.Enabled = False Else tsmiColler.Enabled = True End If tsmiColler.Enabled = False End If End If End Sub
Pour copier, j'utilise ça
Pour coller, j'utilise ça
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 My.Computer.Clipboard.SetText(txtMagPre.Text)
Maintenant, il faut gérer aussi les raccourcis Ctrl + c et Ctrl + v.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 txtMagPre.Text= My.Computer.Clipboard.GetText()
Dans l'évènement Keypress d'un TextBox :
Code pour Ctrl + v
Tout fonctionne correctement (notamment la vérification de ce que contient le presse papier) mais (ah enfin
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 'Si ctrl+v If Asc(e.KeyChar) = 22 Then 'Si le presse papier contient du texte et au maximum 75 caratères alors If My.Computer.Clipboard.ContainsText = True And My.Computer.Clipboard.GetText.Length <= 75 Then txtMagPre.Text = My.Computer.Clipboard.GetText Else e.Handled = True End If End If) lorsque je fais Ctrl + v le contenu du presse papier apparaît deux fois. Si le presse papier contient "RRR", j'ai dans le TextBox: "RRRRRR".
Si j'utilise le menu contextuel, je n'ai pas ce souci.
J'ai vérifié en pas-à-pas cette ligne:
Et txtMagPre.Text est bien égale au contenu du presse papier mais une fois le pas-à-pas terminé (end sub de l'évènement), le contenu du TextBox est égal à deux fois celui du presse papier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part txtMagPre.Text = My.Computer.Clipboard.GetText
J'ai l'impression qu'il y a deux fois Ctrl + v.
Merci pour vos aides et merci à tous de m'avoir lu.
Partager