Cómo: Agregar datos al Portapapeles
La clase Clipboard proporciona métodos que puede utilizar para interactuar con el Portapapeles del sistema operativo Windows. Muchas aplicaciones utilizan el Portapapeles como un repositorio temporal para los datos. Por ejemplo, los procesadores de textos utilizan el Portapapeles durante las operaciones de cortar y pegar. El Portapapeles también resulta de utilidad para transferir datos de una aplicación a otra.
Cuando agrega datos al Portapapeles, puede indicar su formato para que otras aplicaciones los reconozcan si pueden utilizar el formato. También puede agregar datos al Portapapeles en varios formatos distintos para aumentar el número de otras aplicaciones que pueden utilizar potencialmente los datos.
Un formato del Portapapeles es una cadena que identifica el formato para que una aplicación que lo utilice pueda recuperar los datos asociados. La clase DataFormats proporciona los nombres de formato predefinidos para su uso. También puede utilizar sus propios nombres de formato o un tipo de objeto como su formato.
Para agregar datos al Portapapeles en uno o varios formatos, utilice el método SetDataObject. Puede pasar cualquier objeto a este método, pero para agregar datos en varios formatos, antes debe agregar los datos a un objeto independiente diseñado para trabajar con varios formatos. Normalmente, agregará los datos a DataObject, pero puede utilizar cualquier tipo que implementa la interfaz IDataObject.
En .NET Framework versión 2.0, puede agregar directamente los datos al Portapapeles utilizando los nuevos métodos diseñados para hacer más sencillas las tareas básicas del Portapapeles. Utilice estos métodos al trabajar con datos en un solo formato común, por ejemplo texto.
Nota
Todas las aplicaciones basadas en Windows comparten el Portapapeles. Por consiguiente, el contenido está sujeto a cambios cuando pase a otra aplicación.
La clase Clipboard sólo se puede utilizar en subprocesos establecidos en modo STA (Subprocesamiento controlado simple). Para utilizar esta clase, cerciórese de que el método Main está marcado con el atributo STAThreadAttribute.
Un objeto debe ser serializable para que pueda situarse en el Portapapeles. Para hacer que un tipo sea serializable, márquelo con el atributo SerializableAttribute. Si pasa un objeto no serializable a un método Clipboard, se producirá un error en el método y no se iniciará una excepción. Para obtener más información sobre serialización, vea System.Runtime.Serialization.
Para agregar datos en el Portapapeles en un solo formato común
Utilice el método SetAudio, SetFileDropList, SetImage o SetText. Estos métodos sólo están disponibles en .NET Framework versión 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 agregar datos al Portapapeles en un formato personalizado
Utilice el método SetData con un nombre de formato personalizado. Este método sólo está disponible en .NET Framework versión 2.0.
También puede utilizar los nombres de formato predefinidos con el método SetData. Para obtener más información, vea 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 agregar datos al Portapapeles en varios formatos
Utilice el método SetDataObject y pase una clase DataObject que contiene los datos. Debe utilizar este método para agregar datos al Portapapeles en versiones anteriores a .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; } } }
Vea también
Tareas
Cómo: Recuperar datos del Portapapeles
Otros recursos
Compatibilidad con las operaciones de arrastrar y colocar y con el Portapapeles