Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Klasa Clipboard udostępnia metody, które współdziałają z funkcją Schowka systemu operacyjnego Windows. Wiele aplikacji używa Schowka jako tymczasowego repozytorium danych. Na przykład edytory tekstu używają Schowka podczas operacji wycinania i wklejania. Schowek przenosi również dane z jednej aplikacji do drugiej.
Po dodaniu danych do Schowka wskaż format danych, aby inne aplikacje mogły rozpoznać dane, jeśli będą mogły używać tego formatu. Dodaj dane do Schowka w wielu różnych formatach, aby zwiększyć liczbę innych aplikacji, które mogą potencjalnie korzystać z danych.
Format schowka to ciąg, który określa format, aby aplikacja korzystająca z tego formatu mogła pobrać powiązane dane. Klasa DataFormats zawiera wstępnie zdefiniowane nazwy formatów do użycia. Możesz również użyć własnych nazw formatów lub użyć typu obiektu jako jego formatu.
Uwaga / Notatka
Wszystkie aplikacje oparte na systemie Windows współużytkują Schowek. W związku z tym zawartość może ulec zmianie po przełączeniu się do innej aplikacji.
Klasę Clipboard można używać tylko w wątkach ustawionych na tryb jednowątkowy (STA). Aby użyć tej klasy, upewnij się, że metoda Main jest oznaczona atrybutem STAThreadAttribute.
Aby dodać dane do Schowka w jednym lub wielu formatach, użyj metody SetDataObject. Przekaż dowolny obiekt do tej metody. Aby dodać dane w wielu formatach, najpierw dodaj dane do oddzielnego obiektu przeznaczonego do pracy z wieloma formatami. Zazwyczaj dodaj dane do elementu DataObject, ale możesz użyć dowolnego typu, który implementuje interfejs IDataObject.
Aby dodać dane do Schowka w jednym, wspólnym formacie, użyj konkretnej metody dla tego formatu, na przykład SetText dla tekstu.
Ważne
Obiekty niestandardowe muszą być serializowalne w formacie JSON, aby można je było umieścić w Schowku. Użyj nowych metod bezpiecznych pod kątem typu, takich jak SetDataAsJson , które automatycznie obsługują serializacji JSON. Starsza SetData() metoda nie działa już z obiektami niestandardowymi rozpoczynającymi się od platformy .NET 9 z powodu usunięcia elementu BinaryFormatter.
Dodawanie danych w jednym formacie
Użyj metody SetAudio, SetFileDropList, SetImagelub SetText.
// Demonstrates SetAudio, ContainsAudio, and GetAudioStream.
public Stream SwapClipboardAudio(Stream replacementAudioStream)
{
Stream? returnAudioStream = null;
if (Clipboard.ContainsAudio())
{
returnAudioStream = Clipboard.GetAudioStream();
Clipboard.SetAudio(replacementAudioStream);
}
return returnAudioStream;
}
// Demonstrates SetFileDropList, ContainsFileDroList, and GetFileDropList
public StringCollection SwapClipboardFileDropList(StringCollection replacementList)
{
StringCollection? returnList = null;
if (Clipboard.ContainsFileDropList())
{
returnList = Clipboard.GetFileDropList();
Clipboard.SetFileDropList(replacementList);
}
return returnList;
}
// Demonstrates SetImage, ContainsImage, and GetImage.
public Image SwapClipboardImage(Image replacementImage)
{
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 Stream) As Stream
Dim returnAudioStream As 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 StringCollection) As StringCollection
Dim returnList As 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 Image) As Image
Dim returnImage As 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
Dodawanie danych w formacie niestandardowym
Użyj metody Clipboard.SetDataAsJson<T>(String, T) z niestandardową nazwą formatu i Twoim obiektem.
Metoda SetDataAsJson<T>() automatycznie serializuje obiekty niestandardowe przy użyciu System.Text.Json. Jest to zalecane podejście w .NET 10 i nowszych do przechowywania typów niestandardowych w schowku, ponieważ zapewnia bezpieczeństwo typów danych i korzyści bezpieczeństwa w porównaniu z wcześniejszą metodą SetData().
Ważne
Metoda SetData w starszej wersji nie działa już z obiektami niestandardowymi na platformie .NET 9 i nowszych wersjach z powodu usunięcia komponentu BinaryFormatter. Zamiast tego należy używać SetDataAsJson<T>() w przypadku typów niestandardowych.
// Demonstrates SetDataAsJson, ContainsData, and GetData
// using a custom format name and a business object.
public Customer TestCustomFormat
{
get
{
Clipboard.SetDataAsJson("CustomerFormat", new Customer("Customer Name"));
if (Clipboard.ContainsData("CustomerFormat"))
{
if (Clipboard.TryGetData("CustomerFormat", out Customer customerData))
return customerData;
}
return null;
}
}
' Demonstrates SetData, ContainsData, and GetData
' using a custom format name and a business object.
Public ReadOnly Property TestCustomFormat() As Customer
Get
Clipboard.SetDataAsJson("CustomerFormat", New Customer("Customer Name"))
If Clipboard.ContainsData("CustomerFormat") Then
Dim customerData As Customer = Nothing
If Clipboard.TryGetData("CustomerFormat", customerData) Then
Return customerData
End If
End If
Return Nothing
End Get
End Property
Klasa Customer używana w poprzednim fragmencie kodu:
// Customer class used in custom clipboard format examples.
public class Customer
{
public string Name { get; set; }
public Customer(string name)
{
Name = name;
}
}
'Customer class used in custom clipboard format examples.
Public Class Customer
Public Property Name As String
Public Sub New(ByVal name As String)
Me.Name = name
End Sub
End Class
Dodawanie danych w wielu formatach
Użyj metody Clipboard.SetDataObject i przekaż obiekt DataObject zawierający twoje dane.
// Demonstrates how to use a DataObject to add
// data to the Clipboard in multiple formats.
public void TestClipboardMultipleFormats()
{
DataObject data = new();
Customer customer = new("Customer #2112");
ListViewItem listViewItem = new($"Customer as ListViewItem {customer.Name}");
// Add a Customer object using the type as the format.
data.SetDataAsJson(customer);
// Add a ListViewItem object using a custom format name.
data.SetDataAsJson("ListViewItemFormat", listViewItem.Text);
Clipboard.SetDataObject(data);
// Retrieve the data from the Clipboard.
DataObject retrievedData = (DataObject)Clipboard.GetDataObject()!;
if (retrievedData.GetDataPresent("ListViewItemFormat"))
{
if (retrievedData.TryGetData("ListViewItemFormat", out String item))
{
ListViewItem recreatedListViewItem = new(item);
MessageBox.Show($"Data contains ListViewItem with text of {recreatedListViewItem.Text}");
}
}
if (retrievedData.GetDataPresent(typeof(Customer)))
{
if (retrievedData.TryGetData(out Customer newCustomer))
{
MessageBox.Show($"Data contains Customer with name of {newCustomer.Name}");
}
}
}
' Demonstrates how to use a DataObject to add
' data to the Clipboard in multiple formats.
Public Sub TestClipboardMultipleFormats()
Dim data As New DataObject()
Dim customer As New Customer("Customer #2112")
Dim listViewItem As New ListViewItem($"Customer as ListViewItem {customer.Name}")
' Add a Customer object using the type as the format.
data.SetDataAsJson(customer)
' Add a ListViewItem object using a custom format name.
data.SetDataAsJson("ListViewItemFormat", listViewItem.Text)
Clipboard.SetDataObject(data)
' Retrieve the data from the Clipboard.
Dim retrievedData As DataObject = CType(Clipboard.GetDataObject(), DataObject)
If retrievedData.GetDataPresent("ListViewItemFormat") Then
Dim item As String = Nothing
If retrievedData.TryGetData("ListViewItemFormat", item) Then
Dim recreatedListViewItem As New ListViewItem(item)
MessageBox.Show($"Data contains ListViewItem with text of {recreatedListViewItem.Text}")
End If
End If
If retrievedData.GetDataPresent(GetType(Customer)) Then
Dim newCustomer As Customer = Nothing
If retrievedData.TryGetData(newCustomer) Then
MessageBox.Show($"Data contains Customer with name of {newCustomer.Name}")
End If
End If
End Sub
Klasa Customer używana w poprzednim fragmencie kodu:
// Customer class used in custom clipboard format examples.
public class Customer
{
public string Name { get; set; }
public Customer(string name)
{
Name = name;
}
}
'Customer class used in custom clipboard format examples.
Public Class Customer
Public Property Name As String
Public Sub New(ByVal name As String)
Me.Name = name
End Sub
End Class
Zobacz także
.NET Desktop feedback