Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
La Clipboard clase proporciona métodos que puede usar para interactuar con la característica Portapapeles del sistema operativo Windows. Muchas aplicaciones usan el Portapapeles como repositorio temporal para los datos. Por ejemplo, los procesadores de texto usan el Portapapeles durante las operaciones de cortar y pegar. El Portapapeles también es útil para transferir información de una aplicación a otra.
Nota:
Todas las aplicaciones basadas en Windows comparten el Portapapeles del sistema. Por lo tanto, el contenido está sujeto a cambios al cambiar a otra aplicación.
La Clipboard clase solo se puede usar en subprocesos configurados en el modo de apartamento de subproceso único (STA). Para usar esta clase, asegúrese de que el Main método está marcado con el STAThreadAttribute atributo .
Algunas aplicaciones almacenan datos en el Portapapeles en varios formatos para aumentar el número de otras aplicaciones que pueden usar los datos. Un formato de portapapeles es una cadena que identifica el formato. Una aplicación que usa el formato identificado puede recuperar los datos asociados en el Portapapeles. La DataFormats clase proporciona nombres de formato predefinidos para su uso. También puede usar sus propios nombres de formato o usar el tipo de un objeto como formato. Para obtener información sobre cómo agregar datos al Portapapeles, vea Cómo agregar datos al Portapapeles.
Para determinar si el Portapapeles contiene datos en un formato determinado, use uno de los Contains métodos Format. Para recuperar datos del Portapapeles, use alguno de los métodos GetFormat o el método TryGetData para formatos personalizados.
Nota:
En .NET Framework, se usa el GetData método en lugar de TryGetDatay el GetDataObject método se usa normalmente para varios escenarios de formato.
Recuperar en formato único
Use el GetAudioStreammétodo , GetFileDropList, GetImageo GetText . Opcionalmente, use primero los métodos Contains correspondientes para determinar si los datos están disponibles en un formato determinado.
En el caso de los formatos de datos personalizados, use el TryGetData método en lugar del método obsoleto GetData . El GetData método devuelve datos correctamente en la mayoría de los casos, pero cuando BinaryFormatter es necesario para la deserialización y no está habilitado, devuelve una NotSupportedException instancia que indica BinaryFormatter que es necesaria. En el caso de los formatos de datos personalizados, se recomienda usar los métodos basados en JSON (SetDataAsJson<T>() y TryGetData<T>()) para mejorar la seguridad de tipos y evitar BinaryFormatter dependencias.
Nota:
En .NET Framework, estos mismos Get métodos format están disponibles, pero se usa GetData en lugar de TryGetData para formatos personalizados.
// Demonstrates TryGetData methods for common formats.
// These methods are preferred over the older Get* methods.
public Stream? SwapClipboardAudio(Stream replacementAudioStream)
{
Stream? returnAudioStream = null;
if (Clipboard.ContainsAudio())
{
returnAudioStream = Clipboard.GetAudioStream();
Clipboard.SetAudio(replacementAudioStream);
}
return returnAudioStream;
}
// Demonstrates TryGetData for file drop lists
public StringCollection? SwapClipboardFileDropList(StringCollection replacementList)
{
StringCollection? returnList = null;
if (Clipboard.ContainsFileDropList())
{
returnList = Clipboard.GetFileDropList();
Clipboard.SetFileDropList(replacementList);
}
return returnList;
}
// Demonstrates TryGetData for images
public Image? SwapClipboardImage(Image replacementImage)
{
Image? returnImage = null;
if (Clipboard.ContainsImage())
{
returnImage = Clipboard.GetImage();
Clipboard.SetImage(replacementImage);
}
return returnImage;
}
// Demonstrates TryGetData for text in HTML format
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;
}
// Example of using TryGetData for custom string-based data
public string? GetCustomStringData(string format)
{
if (Clipboard.TryGetData(format, out object? data))
{
return data as string;
}
return null;
}
' Demonstrates TryGetData methods for common formats.
' These methods are preferred over the older Get* methods.
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 TryGetData for file drop lists
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 TryGetData for images
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 TryGetData for text in HTML format
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
' Example of using TryGetData for custom string-based data
Public Function GetCustomStringData(ByVal format As String) As String
Dim data As Object = Nothing
If Clipboard.TryGetData(format, data) Then
Return TryCast(data, String)
End If
Return Nothing
End Function
Recuperar en formato personalizado
Use el TryGetData método con un nombre de formato personalizado. Este método reemplaza el método obsoleto GetData en las versiones modernas de .NET.
También puede usar nombres de formato predefinidos con este método. Para obtener más información, consulte DataFormats.
Importante
En .NET 10 y versiones posteriores, SetData ya no funciona con tipos que requieren BinaryFormatter para la serialización. El GetData método devuelve datos correctamente en la mayoría de los casos, pero cuando BinaryFormatter es necesario para la deserialización y no está habilitado, devuelve una NotSupportedException instancia que indica BinaryFormatter que es necesaria. En los ejemplos siguientes se muestra cómo recuperar datos que pueden haber sido establecidos por otras aplicaciones o versiones anteriores de .NET.
Nota:
En .NET Framework, se utiliza el método GetData en lugar de TryGetData, y la serialización de objetos a través de SetData es totalmente compatible.
// Demonstrates TryGetData using a custom format name and a business object.
// Note: In .NET 10, SetData for objects is no longer supported,
// so this example shows how to retrieve data that might have been
// set by other applications or earlier .NET versions.
public Customer? TestCustomFormat
{
get
{
// For demonstration, we'll use string data instead of objects
// since SetData for objects is no longer supported in .NET 10
if (Clipboard.TryGetData("CustomerFormat", out object? data))
{
return data as Customer;
}
return null;
}
}
' Demonstrates TryGetData using a custom format name and a business object.
' Note: In .NET 10, SetData for objects is no longer supported,
' so this example shows how to retrieve data that might have been
' set by other applications or earlier .NET versions.
Public ReadOnly Property TestCustomFormat() As Customer
Get
Dim data As Object = Nothing
' For demonstration, we'll use string data instead of objects
' since SetData for objects is no longer supported in .NET 10
If Clipboard.TryGetData("CustomerFormat", data) Then
Return TryCast(data, Customer)
End If
Return Nothing
End Get
End Property
La Customer clase usada en el fragmento de código anterior:
[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
Recuperar en varios formatos
Utilice el método GetDataObject para obtener un IDataObject. A continuación, utilice TryGetData para recuperar datos en formatos específicos.
Este enfoque se recomienda para las aplicaciones modernas de .NET, ya que usa las API más recientes y seguras.
Nota:
En .NET Framework, normalmente se usa el método GetDataObject y se trabaja directamente con el IDataObject devuelto, utilizando sus métodos como GetData en lugar del enfoque más reciente TryGetData.
// Demonstrates how to retrieve data from the Clipboard in multiple formats
// using TryGetData instead of the obsoleted GetData method.
public void TestClipboardMultipleFormats()
{
IDataObject? dataObject = Clipboard.GetDataObject();
if (dataObject != null)
{
// Check for custom format
if (dataObject.GetDataPresent("CustomFormat"))
{
if (Clipboard.TryGetData("CustomFormat", out object? customData))
{
if (customData is ListViewItem item)
{
MessageBox.Show(item.Text);
}
else if (customData is string stringData)
{
MessageBox.Show(stringData);
}
}
}
// Check for Customer type - note that object serialization
// through SetData is no longer supported in .NET 10
if (dataObject.GetDataPresent(typeof(Customer)))
{
if (Clipboard.TryGetData(typeof(Customer).FullName!, out object? customerData))
{
if (customerData is Customer customer)
{
MessageBox.Show(customer.Name);
}
}
}
// For modern .NET 10 applications, prefer using standard formats
if (Clipboard.ContainsText())
{
string text = Clipboard.GetText();
MessageBox.Show($"Text data: {text}");
}
}
}
' Demonstrates how to retrieve data from the Clipboard in multiple formats
' using TryGetData instead of the obsoleted GetData method.
Public Sub TestClipboardMultipleFormats()
Dim dataObject As IDataObject = Clipboard.GetDataObject()
If dataObject IsNot Nothing Then
' Check for custom format
If dataObject.GetDataPresent("CustomFormat") Then
Dim customData As Object = Nothing
If Clipboard.TryGetData("CustomFormat", customData) Then
Dim item As ListViewItem = TryCast(customData, ListViewItem)
If item IsNot Nothing Then
MessageBox.Show(item.Text)
ElseIf TypeOf customData Is String Then
MessageBox.Show(CStr(customData))
End If
End If
End If
' Check for Customer type - note that object serialization
' through SetData is no longer supported in .NET 10
If dataObject.GetDataPresent(GetType(Customer)) Then
Dim customerData As Object = Nothing
If Clipboard.TryGetData(GetType(Customer).FullName, customerData) Then
Dim customer As Customer = TryCast(customerData, Customer)
If customer IsNot Nothing Then
MessageBox.Show(customer.Name)
End If
End If
End If
' For modern .NET 10 applications, prefer using standard formats
If Clipboard.ContainsText() Then
Dim text As String = Clipboard.GetText()
MessageBox.Show($"Text data: {text}")
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
Consulte también
.NET Desktop feedback