Partager via


Comment : ajouter des données au Presse-papiers

La classe Clipboard fournit des méthodes que vous pouvez utiliser pour interagir avec les fonctionnalités du Presse-papiers du système d'exploitation Windows. De nombreuses applications utilisent le Presse-papiers en tant que référentiel temporaire pour les données. Par exemple, les applications de traitement de texte utilisent le Presse-papiers pour les opérations de copier-coller. Le Presse-papiers est également utile pour transférer des données d'une application à une autre.

Lorsque vous ajoutez des données au Presse-papiers, vous pouvez indiquer le format des données afin que d'autres applications puissent reconnaître les données lorsqu'elles peuvent utiliser ce format. Vous pouvez également ajouter des données au Presse-papiers dans différents formats pour augmenter le nombre d'autres applications susceptibles d'utiliser les données.

Un format de Presse-papiers est une chaîne qui identifie le format afin qu'une application qui utilise ce format puisse récupérer les données associées. La classe DataFormats fournit des noms de formats prédéfinis que vous pouvez utiliser. Vous pouvez également utiliser vos propres noms de formats ou le type d'un objet comme son format.

Pour ajouter des données au Presse-papiers dans un ou plusieurs formats, utilisez la méthode SetDataObject. Vous pouvez passer n'importe quel objet à cette méthode, mais pour ajouter des données dans plusieurs formats, vous devez d'abord les ajouter dans un objet distinct conçu pour utiliser des formats multiples. En général, vous ajouterez vos données à un DataObject, mais vous pouvez utiliser n'importe quel type qui implémente l'interface IDataObject.

Dans .NET Framework version 2.0, vous pouvez ajouter directement des données au Presse-papiers en utilisant de nouvelles méthodes conçues pour simplifier les tâches de base du Presse-papiers. Utilisez ces méthodes lorsque vous utilisez des données dans un seul format commun tel que le format texte.

Notes

Toutes les applications Windows partagent le Presse-papiers. Par conséquent, le contenu est susceptible de changer lorsque vous basculez vers une autre application.

La classe Clipboard peut être utilisée uniquement dans les threads configurés en mode STA (Single Thread Apartment). Pour utiliser cette classe, veillez à ce que votre méthode Main soit marquée avec l'attribut STAThreadAttribute.

Un objet doit être sérialisable pour être placé dans le Presse-papiers. Pour rendre un type sérialisable, marquez-le avec l'attribut SerializableAttribute. Si vous passez un objet non sérialisable à une méthode Clipboard, la méthode échouera sans lever une exception. Pour plus d'informations sur la sérialisation, consultez System.Runtime.Serialization.

Pour ajouter des données au Presse-papiers dans un seul format commun

  • Utilisez la méthode SetAudio, SetFileDropList, SetImage ou SetText. Ces méthodes sont disponibles uniquement dans .NET Framework version 2.0.

    ' Demonstrates SetAudio, ContainsAudio, and GetAudioStream.
    Public Function SwapClipboardAudio( _
        ByVal replacementAudioStream As System.IO.Stream) _
        As System.IO.Stream
    
        Dim returnAudioStream As System.IO.Stream = Nothing
    
        If (Clipboard.ContainsAudio()) Then
            returnAudioStream = Clipboard.GetAudioStream()
            Clipboard.SetAudio(replacementAudioStream)
        End If
    
        Return returnAudioStream
    
    End Function
    
    ' Demonstrates SetFileDropList, ContainsFileDroList, and GetFileDropList
    Public Function SwapClipboardFileDropList(ByVal replacementList _
        As System.Collections.Specialized.StringCollection) _
        As System.Collections.Specialized.StringCollection
    
        Dim returnList As System.Collections.Specialized.StringCollection _
            = Nothing
    
        If Clipboard.ContainsFileDropList() Then
    
            returnList = Clipboard.GetFileDropList()
            Clipboard.SetFileDropList(replacementList)
        End If
    
        Return returnList
    
    End Function
    
    ' Demonstrates SetImage, ContainsImage, and GetImage.
    Public Function SwapClipboardImage( _
        ByVal replacementImage As System.Drawing.Image) _
        As System.Drawing.Image
    
        Dim returnImage As System.Drawing.Image = Nothing
    
        If Clipboard.ContainsImage() Then
            returnImage = Clipboard.GetImage()
            Clipboard.SetImage(replacementImage)
        End If
    
        Return returnImage
    End Function
    
    ' Demonstrates SetText, ContainsText, and GetText.
    Public Function SwapClipboardHtmlText( _
        ByVal replacementHtmlText As String) As String
    
        Dim returnHtmlText As String = Nothing
    
        If (Clipboard.ContainsText(TextDataFormat.Html)) Then
            returnHtmlText = Clipboard.GetText(TextDataFormat.Html)
            Clipboard.SetText(replacementHtmlText, TextDataFormat.Html)
        End If
    
        Return returnHtmlText
    
    End Function
    
    // Demonstrates SetAudio, ContainsAudio, and GetAudioStream.
    public System.IO.Stream SwapClipboardAudio(
        System.IO.Stream replacementAudioStream)
    {
        System.IO.Stream returnAudioStream = null;
        if (Clipboard.ContainsAudio())
        {
            returnAudioStream = Clipboard.GetAudioStream();
            Clipboard.SetAudio(replacementAudioStream);
        }
        return returnAudioStream;
    }
    
    // Demonstrates SetFileDropList, ContainsFileDroList, and GetFileDropList
    public System.Collections.Specialized.StringCollection
        SwapClipboardFileDropList(
        System.Collections.Specialized.StringCollection replacementList)
    {
        System.Collections.Specialized.StringCollection returnList = null;
        if (Clipboard.ContainsFileDropList())
        {
            returnList = Clipboard.GetFileDropList();
            Clipboard.SetFileDropList(replacementList);
        }
        return returnList;
    }
    
    // Demonstrates SetImage, ContainsImage, and GetImage.
    public System.Drawing.Image SwapClipboardImage(
        System.Drawing.Image replacementImage)
    {
        System.Drawing.Image returnImage = null;
        if (Clipboard.ContainsImage())
        {
            returnImage = Clipboard.GetImage();
            Clipboard.SetImage(replacementImage);
        }
        return returnImage;
    }
    
    // Demonstrates SetText, ContainsText, and GetText.
    public String SwapClipboardHtmlText(String replacementHtmlText)
    {
        String returnHtmlText = null;
        if (Clipboard.ContainsText(TextDataFormat.Html))
        {
            returnHtmlText = Clipboard.GetText(TextDataFormat.Html);
            Clipboard.SetText(replacementHtmlText, TextDataFormat.Html);
        }
        return returnHtmlText;
    }
    

Pour ajouter des données au Presse-papiers dans un format personnalisé

  • Utilisez la méthode SetData avec un nom de format personnalisé. Cette méthode est uniquement disponible dans .NET Framework version 2.0.

    Vous pouvez également utiliser des noms de formats prédéfinis avec la méthode SetData. Pour plus d'informations, consultez DataFormats.

    ' Demonstrates SetData, ContainsData, and GetData
    ' using a custom format name and a business object.
    Public ReadOnly Property TestCustomFormat() As Customer
        Get
            Clipboard.SetData("CustomerFormat", New Customer("Customer Name"))
    
            If Clipboard.ContainsData("CustomerFormat") Then
                Return CType(Clipboard.GetData("CustomerFormat"), Customer)
            End If
    
            Return Nothing
        End Get
    End Property
    
    
    ...
    
    
    <Serializable()> Public Class Customer
    
        Private nameValue As String = String.Empty
    
        Public Sub New(ByVal name As String)
            nameValue = name
        End Sub
    
        Public Property Name() As String
            Get
                Return nameValue
            End Get
            Set(ByVal value As String)
                nameValue = value
            End Set
        End Property
    
    End Class
    
    // Demonstrates SetData, ContainsData, and GetData
    // using a custom format name and a business object.
    public Customer TestCustomFormat
    {
        get
        {
            Clipboard.SetData("CustomerFormat", new Customer("Customer Name"));
            if (Clipboard.ContainsData("CustomerFormat")) 
            {
                return Clipboard.GetData("CustomerFormat") as Customer;
            }
            return null;
        }
    }
    
    
    ...
    
    
    [Serializable]
    public class Customer
    {
        private string nameValue = string.Empty;
        public Customer(String name)
        {
            nameValue = name;
        }
        public string Name
        {
            get { return nameValue; }
            set { nameValue = value; }
        }
    }
    

Pour ajouter des données au Presse-papiers dans plusieurs formats

  • Utilisez la méthode SetDataObject et passez-la dans un DataObject qui contient vos données. Vous devez utiliser cette méthode pour ajouter des données au Presse-papiers sur les versions précédentes du .NET Framework 2.0.

    ' Demonstrates how to use a DataObject to add
    ' data to the Clipboard in multiple formats.
    Public Sub TestClipboardMultipleFormats()
    
        Dim data As New DataObject()
    
        ' Add a Customer object using the type as the format.
        data.SetData(New Customer("Customer as Customer object"))
    
        ' Add a ListViewItem object using a custom format name.
        data.SetData("CustomFormat", _
            New ListViewItem("Customer as ListViewItem"))
    
        Clipboard.SetDataObject(data)
        Dim retrievedData As DataObject = _
            CType(Clipboard.GetDataObject(), DataObject)
    
        If (retrievedData.GetDataPresent("CustomFormat")) Then
    
            Dim item As ListViewItem = _
                TryCast(retrievedData.GetData("CustomFormat"), ListViewItem)
    
            If item IsNot Nothing Then
                MessageBox.Show(item.Text)
            End If
    
        End If
    
        If retrievedData.GetDataPresent(GetType(Customer)) Then
    
            Dim customer As Customer = _
                CType(retrievedData.GetData(GetType(Customer)), Customer)
    
            If customer IsNot Nothing Then
    
                MessageBox.Show(customer.Name)
            End If
    
        End If
    
    End Sub
    
    
    ...
    
    
    <Serializable()> Public Class Customer
    
        Private nameValue As String = String.Empty
    
        Public Sub New(ByVal name As String)
            nameValue = name
        End Sub
    
        Public Property Name() As String
            Get
                Return nameValue
            End Get
            Set(ByVal value As String)
                nameValue = value
            End Set
        End Property
    
    End Class
    
    // Demonstrates how to use a DataObject to add
    // data to the Clipboard in multiple formats.
    public void TestClipboardMultipleFormats()
    {
        DataObject data = new DataObject();
    
        // Add a Customer object using the type as the format.
        data.SetData(new Customer("Customer as Customer object"));
    
        // Add a ListViewItem object using a custom format name.
        data.SetData("CustomFormat", 
            new ListViewItem("Customer as ListViewItem"));
    
        Clipboard.SetDataObject(data);
        DataObject retrievedData = (DataObject)Clipboard.GetDataObject();
    
        if (retrievedData.GetDataPresent("CustomFormat"))
        {
            ListViewItem item = 
                retrievedData.GetData("CustomFormat") as ListViewItem;
            if (item != null)
            {
                MessageBox.Show(item.Text);
            }
        }
    
        if (retrievedData.GetDataPresent(typeof(Customer)))
        {
            Customer customer = 
                retrievedData.GetData(typeof(Customer)) as Customer;
            if (customer != null)
            {
                MessageBox.Show(customer.Name);
            }
        }
    }
    
    
    ...
    
    
    [Serializable]
    public class Customer
    {
        private string nameValue = string.Empty;
        public Customer(String name)
        {
            nameValue = name;
        }
        public string Name
        {
            get { return nameValue; }
            set { nameValue = value; }
        }
    }
    

Voir aussi

Tâches

Comment : récupérer des données du Presse-papiers

Autres ressources

Opérations glisser-déplacer et prise en charge du Presse-papiers