Freigeben über


Clipboard-Klasse

Stellt Methoden bereit, mit denen Daten in der Zwischenablage des Systems abgelegt bzw. aus dieser abgerufen werden. Die Klasse kann nicht geerbt werden.

Namespace: System.Windows.Forms
Assembly: System.Windows.Forms (in system.windows.forms.dll)

Syntax

'Declaration
Public NotInheritable Class Clipboard
'Usage
Dim instance As Clipboard
public sealed class Clipboard
public ref class Clipboard sealed
public final class Clipboard
public final class Clipboard

Hinweise

Eine Liste der für die Clipboard-Klasse zu verwendenden vordefinierten Formate finden Sie unter der DataFormats-Klasse.

Rufen Sie SetDataObject auf, um Daten in der Zwischenablage abzulegen. Um eine beständige Kopie der Daten in der Zwischenablage abzulegen, legen Sie den copy-Parameter auf true fest.

Hinweis

Daten sollten in der Zwischenablage in mehreren Formaten gespeichert werden. Dadurch erhöhen Sie die Wahrscheinlichkeit, dass Zielanwendungen, deren Anforderung an das Format nicht bekannt sind, die Daten erfolgreich abrufen können.

Rufen Sie GetDataObject auf, um Daten aus der Zwischenablage abzurufen. Die Daten werden als Objekt zurückgegeben, das die IDataObject-Schnittstelle implementiert. Verwenden Sie die durch IDataObject angegebenen Methoden sowie Felder in DataFormats, um die Daten aus dem Objekt zu extrahieren. Wenn Ihnen das Format der abgerufenen Daten nicht bekannt ist, rufen Sie die GetFormats-Methode der IDataObject-Schnittstelle auf, um eine Liste aller Speicherformate dieser Daten zu erhalten. Rufen Sie anschließend die GetData-Methode der IDataObject-Schnittstelle auf, und geben Sie ein Format an, das von der Anwendung unterstützt wird.

In Microsoft .NET Framework, Version 2.0 stellt die Clipboard-Klasse zusätzliche Methoden bereit, die die Arbeit mit der Zwischenablage des Systems erleichtern. Rufen Sie die Clear-Methode auf, um alle Daten aus der Zwischenablage zu entfernen. Sie können der Zwischenablage Daten in einem bestimmten Format hinzufügen, indem Sie die entsprechende SetFormat-Methode aufrufen, z. B. SetText, oder indem Sie die SetData-Methode zum Angeben des Formats aufrufen. Wenn Sie Daten in einem bestimmten Format aus der Zwischenablage abrufen möchten, rufen Sie zunächst die entsprechende ContainsFormat-Methode auf (z. B. ContainsText), um zu bestimmen, ob die Zwischenablage Daten in diesem Format enthält. Rufen Sie dann die entsprechende GetFormat-Methode auf (z. B. GetText), um die Daten abzurufen, wenn sie in der Zwischenablage enthalten sind. Um bei diesen Operationen das Format anzugeben, rufen Sie stattdessen die ContainsData-Methode und die GetData-Methode auf.

Hinweis

Sämtliche Windows-basierten Anwendungen verwenden die Zwischenablage des Systems gemeinsam, sodass sich die Inhalte beim Wechsel in eine andere Anwendung ändern können.

Um ein Objekt in der Zwischenablage ablegen zu können, muss es serialisierbar sein. Wenn Sie ein nicht serialisierbares Objekt an eine Clipboard-Methode übergeben, tritt bei der Methode ein Fehler auf, ohne dass eine Ausnahme ausgelöst wird. Weitere Informationen zur Serialisierung finden Sie unter Serialisierung. Wenn für die Zielanwendung ein besonderes Datenformat erforderlich ist, kann die Anwendung aufgrund der Header, die den Daten bei der Serialisierung hinzugefügt werden, die Daten möglicherweise nicht erkennen. Um das Datenformat beizubehalten, fügen Sie die Daten als Byte-Array einem MemoryStream hinzu, und übergeben Sie den MemoryStream an die SetData-Methode.

Die Clipboard-Klasse kann nur in Threads verwendet werden, die auf den STA-Modus (Singlethread-Apartment) festgelegt sind. Stellen Sie zum Verwenden dieser Klasse sicher, dass die Main-Methode mit dem STAThreadAttribute-Attribut gekennzeichnet ist.

Wenn das Metadateiformat über die Zwischenablage verwendet wird, müssen Sie ggf. Folgendes berücksichtigen: Aufgrund einer Beschränkung in der aktuellen Implementierung der DataObject-Klasse wird das von .NET Framework verwendete Metadateiformat möglicherweise nicht von Anwendungen erkannt, die ein älteres Metadateiformat verwenden. In diesem Fall müssen Sie die Interaktion mit den Anwendungsprogrammierschnittstellen (APIs) der Win32-Zwischenablage sicherstellen. Weitere Informationen finden Sie im Artikel 323530, "Metafiles on Clipboard Are Not Visible to All Applications", in der Microsoft Knowledge Base unter http://support.microsoft.

Hinweis zu Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows CE: In Windows CE kann ein aus der Zwischenablage eingefügter Arbeitsspeicherstream etwas größer sein als der in die Zwischenablage kopierte Arbeitsspeicherstream, da zusätzliche Bytes am Ende des ursprünglichen Arbeitsspeicherstreams angehängt werden können. Um den Arbeitsspeicherstream exakt abzurufen und die Art und Weise des Empfangs zu bestimmen, stellen Sie dem Objekt die Größe als Präfix voran, oder kopieren Sie ein DataObject mit dem Arbeitsspeicherstream und einem Zeichenfolgenwert seiner Größe in die Zwischenablage.

Beispiel

Im folgenden Codebeispiel werden mithilfe von Clipboard-Methoden Daten in der Zwischenablage des Systems abgelegt und von dort abgerufen. In diesem Code wird davon ausgegangen, dass button1, button2, textBox1 und textBox2 erstellt und im Formular platziert wurden.

Die button1_Click-Methode ruft SetDataObject auf, um den ausgewählten Text aus dem Textfeld abzurufen und diesen in der Zwischenablage des Systems abzulegen.

Die button2_Click-Methode ruft GetDataObject auf, um Daten aus der Zwischenablage des Systems abzurufen. Der Code verwendet IDataObject und DataFormats, um die zurückgegebenen Daten zu extrahieren, und zeigt die Daten in textBox2 an.

Private Sub button1_Click(sender As Object, e As System.EventArgs)
    ' Takes the selected text from a text box and puts it on the clipboard.
    If textBox1.SelectedText <> "" Then
        Clipboard.SetDataObject(textBox1.SelectedText)
    Else
        textBox2.Text = "No text selected in textBox1"
    End If
End Sub 'button1_Click
 
Private Sub button2_Click(sender As Object, e As System.EventArgs)
    ' Declares an IDataObject to hold the data returned from the clipboard.
    ' Retrieves the data from the clipboard.
    Dim iData As IDataObject = Clipboard.GetDataObject()
    
    ' Determines whether the data is in a format you can use.
    If iData.GetDataPresent(DataFormats.Text) Then
        ' Yes it is, so display it in a text box.
        textBox2.Text = CType(iData.GetData(DataFormats.Text), String)
    Else
        ' No it is not.
        textBox2.Text = "Could not retrieve data off the clipboard."
    End If
End Sub 'button2_Click
private void button1_Click(object sender, System.EventArgs e) {
    // Takes the selected text from a text box and puts it on the clipboard.
    if(textBox1.SelectedText != "")
       Clipboard.SetDataObject(textBox1.SelectedText);
    else
       textBox2.Text = "No text selected in textBox1";
 }
 
 private void button2_Click(object sender, System.EventArgs e) {
    // Declares an IDataObject to hold the data returned from the clipboard.
    // Retrieves the data from the clipboard.
    IDataObject iData = Clipboard.GetDataObject();
 
    // Determines whether the data is in a format you can use.
    if(iData.GetDataPresent(DataFormats.Text)) {
       // Yes it is, so display it in a text box.
       textBox2.Text = (String)iData.GetData(DataFormats.Text); 
    }
    else {
       // No it is not.
       textBox2.Text = "Could not retrieve data off the clipboard.";
    }
 }
 
private:
   void button1_Click( Object^ /*sender*/, System::EventArgs^ /*e*/ )
   {
      // Takes the selected text from a text box and puts it on the clipboard.
      if ( !textBox1->SelectedText->Equals( "" ) )
      {
         Clipboard::SetDataObject( textBox1->SelectedText );
      }
      else
      {
         textBox2->Text = "No text selected in textBox1";
      }
   }

   void button2_Click( Object^ /*sender*/, System::EventArgs^ /*e*/ )
   {
      // Declares an IDataObject to hold the data returned from the clipboard.
      // Retrieves the data from the clipboard.
      IDataObject^ iData = Clipboard::GetDataObject();
      
      // Determines whether the data is in a format you can use.
      if ( iData->GetDataPresent( DataFormats::Text ) )
      {
         // Yes it is, so display it in a text box.
         textBox2->Text = (String^)(iData->GetData( DataFormats::Text ));
      }
      else
      {
         // No it is not.
         textBox2->Text = "Could not retrieve data off the clipboard.";
      }
   }
private void button1_Click(Object sender, System.EventArgs e)
{
    // Takes the selected text from a text box and puts it on the clipboard.
    if (!textBox1.get_SelectedText().Equals("")) {
        Clipboard.SetDataObject(textBox1.get_SelectedText());
    }
    else {
        textBox2.set_Text("No text selected in textBox1");
    }
} //button1_Click

private void button2_Click(Object sender, System.EventArgs e)
{
    // Declares an IDataObject to hold the data returned from the clipboard.
    // Retrieves the data from the clipboard.
    IDataObject iData = Clipboard.GetDataObject();

    // Determines whether the data is in a format you can use.
    if (iData.GetDataPresent(DataFormats.Text)) {
        // Yes it is, so display it in a text box.
        textBox2.set_Text((String)(iData.GetData(DataFormats.Text)));
    }
    else {
        // No it is not.
        textBox2.set_Text("Could not retrieve data off the clipboard.");
    }
} //button2_Click
private function button1_Click(sender : Object, e : System.EventArgs) {
    //Take the selected text from a text box and put it on the clipboard.
    if(textBox1.SelectedText != "")
       Clipboard.SetDataObject(textBox1.SelectedText);
    else
       textBox2.Text = "No text selected in textBox1";
 }
 
 private function button2_Click(sender : Object, e : System.EventArgs) {
    //Declare an IDataObject to hold the data returned from the clipboard.
    //Then retrieve the data from the clipboard.
    var iData : IDataObject = Clipboard.GetDataObject();
 
    //Determine whether the data is in a format you can use.
    if(iData.GetDataPresent(DataFormats.Text)) {
       //Yes it is, so display it in a text box.
       textBox2.Text = String(iData.GetData(DataFormats.Text)); 
    }
    else {
       //No it is not.
       textBox2.Text = "Could not retrieve data off the clipboard.";
    }
 }
 

Vererbungshierarchie

System.Object
  System.Windows.Forms.Clipboard

Threadsicherheit

Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0

Siehe auch

Referenz

Clipboard-Member
System.Windows.Forms-Namespace
DataObject
DataFormats
IDataObject

Weitere Ressourcen

Weitere Überlegungen zur Sicherheit in Windows Forms