Vorgehensweise: Hinzufügen von Daten zur Zwischenablage
Die Clipboard-Klasse bietet Methoden, mit denen Sie mit dem Zwischenablage-Feature des Windows-Betriebssystems interagieren können. Viele Anwendungen verwenden die Zwischenablage als temporäres Repository für Daten. Beispielsweise verwenden Textverarbeitungsprogramme die Zwischenablage während des Ausschneidens und Einfügens. Die Zwischenablage ist auch nützlich, um Daten von einer Anwendung an eine andere zu übertragen.
Wenn Sie der Zwischenablage Daten hinzufügen, können Sie das Datenformat angeben, damit andere Anwendungen die Daten erkennen können, wenn sie dieses Format verwenden können. Sie können der Zwischenablage auch in mehreren verschiedenen Formaten hinzufügen, um die Anzahl anderer Anwendungen zu erhöhen, die möglicherweise die Daten verwenden können.
Ein Zwischenablageformat ist eine Zeichenfolge, die das Format identifiziert, sodass eine Anwendung, die dieses Format verwendet, die zugehörigen Daten abrufen kann. Die DataFormats-Klasse stellt vordefinierte Formatnamen für Sie bereit. Sie können auch Ihre eigenen Formatnamen oder den Typ eines Objekts als sein Format verwenden.
Zum Hinzufügen von Daten zur Zwischenablage in einem oder mehreren Formaten verwenden Sie die SetDataObject-Methode. Sie können jedes Objekt an diese Methode übergeben, aber um Daten in mehreren Formaten hinzuzufügen, müssen Sie zunächst die Daten zu einem separaten Objekt hinzufügen, das für die Arbeit mit mehreren Formaten konzipiert ist. In der Regel fügen Sie Ihre Daten einem DataObject hinzu, aber Sie können jeden Typ verwenden, der die IDataObject-Schnittstelle implementiert.
Wenn Sie der Zwischenablage Daten in einem einzigen gängigen Format hinzufügen möchten, verwenden Sie die spezifische Methode für dieses Format, z. B. SetText für Text.
Hinweis
Alle Windows-basierten Anwendungen nutzen die Zwischenablage gemeinsam. Daher können sich die Inhalte ändern, wenn Sie zu einer anderen Anwendung wechseln.
Die Clipboard-Klasse kann nur in Threads verwendet werden, die auf den STA-Modus (Single Thread Apartment) festgelegt sind. Um diese Klasse zu verwenden, stellen Sie sicher, dass Ihre Main
-Methode mit dem STAThreadAttribute-Attribut gekennzeichnet ist.
Ein Objekt muss serialisierbar sein, damit es in der Zwischenablage abgelegt werden kann. Um einen Typ serialisierbar zu machen, markieren Sie ihn mit dem SerializableAttribute-Attribut. Wenn Sie ein nicht serialisierbares Objekt an eine Zwischenablagemethode übergeben, schlägt die Methode fehl, ohne eine Ausnahme auszulösen. Weitere Informationen zur Serialisierung finden Sie unter System.Runtime.Serialization.
So fügen Sie der Zwischenablage Daten in einem einzigen, gängigen Format hinzu
Verwenden Sie eine der Methoden SetAudio, SetFileDropList, SetImage oder SetText.
// 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; }
' 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
So fügen Sie der Zwischenablage Daten in einem benutzerdefinierten Format hinzu
Verwenden Sie die SetData-Methode mit einem benutzerdefinierten Formatnamen.
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 Customer TestCustomFormat { get { Clipboard.SetData("CustomerFormat", new Customer("Customer Name")); if (Clipboard.ContainsData("CustomerFormat")) { return Clipboard.GetData("CustomerFormat") as Customer; } return null; } }
' 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 string nameValue = string.Empty; public Customer(String name) { nameValue = name; } public string Name { get { return nameValue; } set { nameValue = value; } } }
<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
So fügen Sie der Zwischenablage Daten in mehreren Formaten hinzu
Verwenden Sie die Clipboard.SetDataObject-Methode, und übergeben Sie ein DataObject an sie, das Ihre Daten enthält.
// 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); } } }
' 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 string nameValue = string.Empty; public Customer(String name) { nameValue = name; } public string Name { get { return nameValue; } set { nameValue = value; } } }
<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
Siehe auch
.NET Desktop feedback