Gewusst wie: Hinzufügen von Daten zur Zwischenablage

Die Clipboard-Klasse stellt Methoden für den Zugriff auf die Zwischenablage des Windows-Betriebssystems bereit. Viele Anwendungen verwenden die Zwischenablage als temporären Speicher für Daten. In Textverarbeitungsprogrammen wird sie beispielsweise während der Operationen Ausschneiden, Kopieren und Einfügen eingesetzt. Die Zwischenablage ist auch hilfreich, um Informationen von einer Anwendung an eine andere zu übertragen.

Wenn Sie der Zwischenablage Daten hinzufügen, können Sie das Datenformat angeben. Auf diese Weise können andere Anwendungen, die das angegebene Format unterstützen, die Daten korrekt abrufen. Darüber hinaus können Sie der Zwischenablage Daten in vielen verschiedenen Formaten hinzufügen, um die Anzahl der Anwendungen zu erweitern, die die Daten nutzen können.

Ein Zwischenablageformat ist eine Zeichenfolge zur Kennzeichnung des Formats, sodass eine Anwendung, die dieses Format unterstützt, die zugehörigen Daten abrufen kann. Die DataFormats-Klasse stellt vordefinierte Formatnamen bereit. Sie können auch eigene Formatnamen verwenden oder den Typ eines Objekts als Format verwenden.

Um Daten in einem oder mehreren Formaten in die Zwischenablage aufzunehmen, verwenden Sie die SetDataObject-Methode. Sie können beliebige Objekte an diese Methode übergeben. Um Daten in mehreren Formaten hinzuzufügen, müssen Sie die Daten jedoch zuerst einem separaten Objekt hinzufügen, das das Arbeiten mit mehreren Formaten unterstützt. Normalerweise werden die Daten DataObject hinzugefügt. Ihnen steht jedoch die Verwendung eines beliebigen Typs frei, durch den die IDataObject-Schnittstelle implementiert wird.

In .NET Framework, Version 2.0 können Sie Daten direkt zur Zwischenablage hinzufügen, da mithilfe neuer Methoden die grundlegenden Aufgaben beim Arbeiten mit der Zwischenablage vereinfacht werden. Verwenden Sie diese Methoden, wenn Sie Daten in einem einzelnen allgemeinen Format, z. B. Text, verwenden.

Tipp

Alle Windows-basierten Anwendungen können auf die Zwischenablage zugreifen. Der Inhalt kann sich also ändern, wenn Sie zu einer anderen Anwendung wechseln.

Die Clipboard-Klasse kann nur in Threads verwendet werden, für die der STA-Modus (Single Thread Apartment) aktiviert wurde. Um diese Klasse zu verwenden, stellen Sie sicher, dass die Main-Methode mit dem STAThreadAttribute-Attribut gekennzeichnet ist.

Damit ein Objekt in der Zwischenablage abgelegt werden kann, muss es serialisierbar sein. Um einen Typ serialisierbar zu machen, kennzeichnen Sie ihn mit dem SerializableAttribute-Attribut. Wenn Sie ein nicht serialisierbares Objekt an eine Clipboard-Methode übergeben, schlägt die Methode fehl, ohne dass eine Ausnahme ausgelöst wird. Weitere Informationen zur Serialisierung finden Sie unter System.Runtime.Serialization.

So fügen Sie Daten in einem einzelnen allgemeinen Format zur Zwischenablage hinzu

  • Verwenden Sie die Methoden SetAudio, SetFileDropList, SetImage oder SetText. Diese Methoden sind nur in .NET Framework, Version 2.0 verfügbar.

    ' 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;
    }
    

So fügen Sie Daten in einem benutzerdefinierten Format zur Zwischenablage hinzu

  • Verwenden Sie die SetData-Methode mit einem benutzerdefinierten Formatnamen. Diese Methode ist nur in .NET Framework, Version 2.0 verfügbar.

    Sie können auch vordefinierte Formatnamen mit der SetData-Methode verwenden. Weitere Informationen finden Sie unter 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; }
        }
    }
    

So fügen Sie Daten in mehreren Formaten zur Zwischenablage hinzu

  • Verwenden Sie die SetDataObject-Methode, und übergeben Sie ein DataObject, das Ihre Daten enthält. In Versionen vor .NET Framework 2.0 müssen Sie diese Methode verwenden, um der Zwischenablage Daten hinzuzufügen.

    ' 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; }
        }
    }
    

Siehe auch

Aufgaben

Gewusst wie: Abrufen von Daten aus der Zwischenablage

Weitere Ressourcen

Drag & Drop-Operationen und Unterstützung der Zwischenablage