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:

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
Ensuite pour chaque bouton du ContextlenuStrip, je gère l'évènement Click

Pour copier, j'utilise ça
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
My.Computer.Clipboard.SetText(txtMagPre.Text)
Pour coller, j'utilise ça

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
txtMagPre.Text= My.Computer.Clipboard.GetText()
Maintenant, il faut gérer aussi les raccourcis Ctrl + c et Ctrl + v.
Dans l'évènement Keypress d'un TextBox :

Code pour Ctrl + v
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
Tout fonctionne correctement (notamment la vérification de ce que contient le presse papier) mais (ah enfin) 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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
txtMagPre.Text = My.Computer.Clipboard.GetText
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.
J'ai l'impression qu'il y a deux fois Ctrl + v.

Merci pour vos aides et merci à tous de m'avoir lu.