Como: Adicionar dados para a área de transferência
A classe Clipboard fornece métodos que você pode usar para interagir com o recurso de Área de Transferência do sistema operacional Windows.Muitos aplicativos usam a Área de Transferência como um repositório temporário para dados.Por exemplo, processadores de texto usam a Área de Transferência durante operações de recortar e colar.A Área de Transferência também é útil para transferir dados de um aplicativo para outro.
Quando você adiciona dados à Área de Transferência, você pode indicar o formato dos dados para que outros aplicativos possam reconhecer os dados se eles puderem usar o formato.Você também pode adicionar dados à Área de Transferência em vários formatos diferentes para aumentar o número de outros aplicativos que potencialmente podem usar os dados.
Um formato da Área de Transferência é uma string que identifica o formato para que um aplicativo que usa esse formato pode 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 usat o tipo de um objeto como seu formato.
Para adicionar dados à Área de Transferência em um ou vários formatos, use o método SetDataObject.Você pode passar qualquer objeto para esse método, mas para adicionar dados em vários formatos, primeiro você deve adicionar os dados a um objeto separado projetado para funcionar com vários formatos.Normalmente, você adicionará os dados a um DataObject, mas você pode usar qualquer tipo que implementa a interface IDataObject.
No .NET Framework versão 2,0, você pode adicionar dados diretamente para a Área de Transferência usando novos métodos projetados para facilitar tarefas básicas da Área de Transferência.Use esses métodos quando você trabalha com dados em um formato simples e comum, como texto.
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ê alternar para outro aplicativo. O Clipboard classe só pode ser usada em segmentos definidos para o único thread apartment (STA) modo.Para usar essa classe, certifique-se de que seu Main método está marcado com o STAThreadAttribute atributo. Uma classe deve ser serializada para que ela seja colocada na Área de Transferência.Para tornar um tipo serializável, marcá-lo com o SerializableAttribute atributo.Se você passar um objeto não serializável para um método da Área de Transferência, o método irá falhar sem lançar uma exceção.Para obter mais informações sobre a serialização, consulte Série . |
Para adicionar dados à Área de transferência em um único formato comum
Use o método SetAudio, SetFileDropList, SetImage ou SetText.Esses métodos estão disponíveis somente no .NET Framework versão 2,0.
' 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; }
Para adicionar dados à Área de transferência em um formato personalizado
Use o método SetData com um nome de formato personalizado.Este método está disponível somente no .NET Framework versão 2,0.
Você também pode usar nomes de formato predefinidos com o método SetData.Para obter mais informações, consulte 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; } } }
Para adicionar dados à Área de Transferência em vários formatos
Use o método SetDataObject e passe um DataObject que contém seus dados.Você deve usar este método para adicionar dados à Área de Transferência em versões anteriores ao .NET Framework 2,0.
' 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; } } }
Consulte também
Tarefas
Como: Recuperar dados da área de transferência
Outros recursos
Operações de Arrastar e Soltar e Suporte à Área de Transferência