Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A Clipboard classe fornece métodos que interagem com o recurso Área de transferência do sistema operacional Windows. Muitos aplicativos usam a área de transferência como um repositório temporário de dados. Por exemplo, os processadores de texto usam a área de transferência durante operações de cortar e colar. A Área de Transferência também transfere dados de uma aplicação para outra.
Quando adicionar dados à Área de Transferência, indique o formato de dados para que outras aplicações os reconheçam, caso consigam utilizar esse formato. Adicione dados à Área de Transferência em vários formatos diferentes para aumentar o número de outras aplicações que poderão potencialmente utilizar os dados.
Um formato de área de transferência é uma coleção de caracteres que identifica o formato para que uma aplicação usando esse formato possa recuperar os dados associados. A classe DataFormats fornece nomes de formato predefinidos para seu uso. Você também pode usar seus próprios nomes de formato ou usar o tipo de um objeto como seu formato.
Observação
Todos os aplicativos baseados no Windows compartilham a Área de Transferência. Portanto, o conteúdo está sujeito a alterações quando você muda para outro aplicativo.
A classe Clipboard só pode ser usada em threads configurados para o modo apartamento de thread único (modo STA). Para usar essa classe, verifique se o método Main está marcado com o atributo STAThreadAttribute.
Para adicionar dados à área de transferência num ou em vários formatos, use o método SetDataObject. Passe qualquer objeto para este método. Para adicionar dados em vários formatos, primeiro adicione os dados a um objeto separado projetado para trabalhar com vários formatos. Normalmente, adicione seus dados a um DataObject, mas você pode usar qualquer tipo que implemente a IDataObject interface.
Para adicionar dados à Área de Transferência num formato único e comum, use o método específico para esse formato, como SetText para texto.
Importante
Os objetos personalizados devem ser serializáveis em JSON para poderem ser colocados na Área de Transferência. Use os novos métodos seguros para tipos, como SetDataAsJson os que manipulam automaticamente a serialização JSON. O método herdado SetData() não funciona mais com objetos personalizados começando com .NET 9 devido à remoção do BinaryFormatter.
Adicionar dados em um único formato
Use o método SetAudio, SetFileDropList, SetImageou 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
Adicionar dados em um formato personalizado
Use o Clipboard.SetDataAsJson<T>(String, T) método com um nome de formato personalizado e seu objeto.
SetDataAsJson<T>() método serializa automaticamente os seus objetos personalizados usando System.Text.Json. Essa é a abordagem recomendada no .NET 10 e posterior para armazenar tipos personalizados na área de transferência, pois fornece vantagens de segurança e proteção de tipo em relação ao método herdado SetData() .
Importante
O método herdado SetData não funciona mais com objetos personalizados no .NET 9 e posterior devido à remoção do BinaryFormatter. Em vez disso, use SetDataAsJson<T>() para tipos personalizados.
// 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
A Customer classe usada no trecho anterior:
// 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
Adicionar dados em vários formatos
Utilize o método Clipboard.SetDataObject e passe um DataObject que contém os seus dados.
// 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
A Customer classe usada no trecho anterior:
// 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
Ver também
.NET Desktop feedback