Site:  Cours VB.net  
4.17 Le presse papier.

On a tous coupé un bout de texte pour le coller à un autre endroit.

Pour cela on a utilisé le presse papier ou 'Clipboard' de Windows.

Comment faire cela par code?

Voyons cela en VB 2003 et VB 2005.

En VB 2003 (Framework 1)

Mettre dans le presse papier:

Clipboard.SetDataObject(Texte)

il y a une surcharge:

Clipboard.SetDataObject(Texte, True)

Le second paramètre spécifie si les données doivent rester dans le Presse-papiers lorsque l'utilisateur quitte l'application.

Récupérer du presse papier:

Dim iData As IDataObject

iData = Clipboard.GetDataObject()
 

Pour la récupération, il faut s'occuper du format des données: si on récupère un BipMap et qu'on le colle dans un textbox, il y a problème!! On récupère donc un objet qui contient les données mais aussi des indications sur le format des données ;on peut tester ce format avant de 'coller'.

On récupère un objet de type IDataObject qui contient

    La méthode GetFormats permettant de connaître tous les formats contenus dans IDataObject

        Dim myFormatsArray As String() = iData.GetFormats(False)

    La méthode GetDataPresents permettant de savoir si un format est présent:

       If iData.GetDataPresent(DataFormats.Text) Then    

    La méthode GetData permettant de récupérer les données (paramètre: le format)

        textBox2.Text = CType(iData.GetData(DataFormats.Text), String)

 

Les différents formats:

DataFormats.Text

DataFormats.Rtf

DataFormats.Html

DataFormats.CommaSeparatedValue

DataFormats.Dif

 

DataFormats.BitMap

DataFormats.Dib

DataFormats.WaveAudio

...

Exemple:

Mettre le texte sélectionné de TextBox1 dans le presse papier:

Un Button1 nommé "Copier" contient le code:

If textBox1.SelectedText <> "" Then
    Clipboard.SetDataObject(textBox1.SelectedText)
End if

 

Remarque: si je voulais un button1 "Couper" il aurait fallu ajouter textBox1.SelectedText=""

Récupérer le texte du presse papier et le mettre dans TextBox2

Un Button2 nommé "Coller" contient le code:

Dim iData As IDataObject = Clipboard.GetDataObject()

' Détermine si c'est du texte.
If iData.GetDataPresent(DataFormats.Text) Then
' récupére le texte par GetData puis le cast en String
textBox2.Text = CType(iData.GetData(DataFormats.Text), String)
Else
'
C'est pas du texte.
textBox2.Text = "Pas possible de récupérer."
End If

 

 

Alternative:

Au lieu d'utiliser l'objet Clipboard, on peut utiliser une méthode plus simple:

Le formulaire étant actif et la textbox ayant le Focus envoyez CTRL C avec SendKeys.Send pour couper, CTRL V pour coller: c'est Windows qui s'occupe de tout!!

 

My.Computer.Clipboard en VB

My.Computer.Clipboard : permet de récupérer des informations sur le contenu du presse-papier, de récupérer et de définir son contenu avec une certaine simplification.

On peut mettre du texte dans le presse-papier:

My.Computer.Clipboard.SetText(TextBox3.Text)

On peut même indiquer le format du texte (rtf, html,  text, unicode..):

My.Computer.Clipboard.SetText(TextBox3.Text, TextDataFormat.Rtf)

Il existe aussi SetImage, SetAudio...

On peut vérifier si le Presse-papier contient une image(ContainsImage), du texte( ContainsText), du son (ContainsAudio).. et récupérer cette image (GetImage ) ou ce texte (GetText).

If My.Computer.Clipboard.ContainsImage Then
    PictureBox1.Image = My.Computer.Clipboard.GetImage
ElseIf My.Computer.Clipboard.ContainsText Then
    TextBox1.Text = My.Computer.Clipboard.GetText
End If

 

Dans VB (le Framework 2) pour copier coller dans un textbox , c'est encore plus facile:

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..