利用.NET Framework类库中的Clipboard类,实现数据的复制(剪切)和粘贴

本文介绍了如何使用.NET Framework的Clipboard类进行复制、剪切和粘贴操作。提供了VB代码示例,详细说明了Clipboard.SetDataObject和Clipboard.GetDataObject方法的用法,展示了如何处理TextBox中的文本数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 "复制"操作的代码

    Private Sub copyToolStripMenuItem11_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem11.Click
        If txtEditor.SelectionLength > 0 Then
            Clipboard.SetDataObject(txtEditor.SelectedText)
        End If
    End Sub

"剪切"操作部分代码

    Private Sub cutToolStripMenuItem12_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem12.Click
        Clipboard.SetDataObject(txtEditor.SelectedText)
        txtEditor.SelectedText = ""
    End Sub

"粘贴"操作部分代码

    Private Sub pasteToolStripMenuItem13_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem13.Click
        Dim iData As IDataObject = Clipboard.GetDataObject()
        If iData.GetDataPresent(DataFormats.Text) Then
            txtEditor.SelectedText = CType(iData.GetData(DataFormats.Text), String)
        End If
    End Sub

注意:txtEditor是文本框TextBox类型

Clipboard.SetDataObject 方法:将数据放置到系统剪贴板上。
重载列表[Visual Basic]

Overloads Public Shared Sub SetDataObject(Object)将非持久性数据放置到系统剪贴板上.

Overloads Public Shared Sub SetDataObject(Object, Boolean)将数据放置在系统剪贴板上,并指定在应用程序退出后是否将数据保留在剪贴板上。调用 SetDataObject 将数据放置在剪贴板上。若要将数据的一份持久性副本放置在剪贴板上,可将 copy 参数设置为 true。 

注意   将数据以多种格式放置在剪贴板上可最大限度地确保目标应用程序(您可能不知道它的格式要求)成功地检索数据。调用 GetDataObject 来从剪贴板检索数据。数据作为实现 IDataObject 接口的对象返回。使用IDataObject 指定的方法和 DataFormats 中的字段从该对象中提取数据。如果不知道检索到的数据的格式,可调用 IDataObject 接口的 GetFormats 方法以获取存储数据所用的所有格式的列表。然后调用 IDataObject 接口的 GetData 方法,并指定您的应用程序可使用的格式。

注意   所有 Windows 应用程序共享系统剪贴板,所以当切换到另一个应用程序时,剪贴板的内容可能会发生变化。

注意   类对于它必须是可序列化的才能放在剪贴板上。

示例

下面的方法在应用程序中运行。它将文本框中所选文本数据的持久性副本放置在系统剪贴板上。此代码假定 button1、textBox1 和 textBox2 已经创建并已经放置在窗体上。

button1_Click 方法调用 SetDataObject 来从文本框中提取选定的文本,然后将其放置到系统剪贴板上。

button2_Click 方法调用 GetDataObject 从系统剪贴板中检索数据。代码使用 IDataObjectDataFormats 提取返回的数据。数据显示在 textBox2 中。

Private Sub button1_Click(sender As Object, e As System.EventArgs)
    ' Takes the selected text from a text box and puts it on the clipboard.
    If textBox1.SelectedText <> "" Then
        Clipboard.SetDataObject(textBox1.SelectedText, True)
    Else
        textBox2.Text = "No text selected in textBox1"
    End If
End Sub 'button1_Click


在另一应用程序中,下面的方法从系统剪贴板检索文本,并将该文本粘贴到 textBox2 中。此代码假定button2textBox2 已经创建并已经放置在窗体上。

Private Sub button2_Click(sender As Object, e As System.EventArgs)
    ' Declares an IDataObject to hold the data returned from the clipboard.
    ' Retrieves the data from the clipboard.
    Dim iData As IDataObject = Clipboard.GetDataObject()
   
    ' Determines whether the data is in a format you can use.
    If iData.GetDataPresent(DataFormats.Text) Then
        ' Yes it is, so display it in a text box.
        textBox2.Text = CType(iData.GetData(DataFormats.Text), String)
    Else
        ' No it is not.
        textBox2.Text = "Could not retrieve data off the clipboard."
    End If
End Sub 'button2_Click

Clipboard.GetDataObject 方法:检索当前在系统剪贴板上的数据。

[Visual Basic]   Public Shared Function GetDataObject() AsIDataObject
返回值:IDataObject(表示当前在剪贴板上的数据)或者空引用(Visual Basic 中为Nothing)(如果剪贴板上没有数据)。

备注:因为从剪贴板返回的对象的数据类型可以不同,所以此方法返回 IDataObject 中的数据。然后,可以使用IDataObject 接口的方法以正确的数据类型提取数据。

IDataObject 接口:为传送数据提供与格式无关的机制。

[Visual Basic]
<ComVisible(True)>
Public Interface IDataObject
interface IDataObject

实现 IDataObject 的类是DataObject类.DataObject类能够实现基数据传输机制.

备注:IDataObject 接口由Clipboard 类在拖放操作中使用。

当在类中实现之后,IDataObject 方法允许用户在该类的实例中以多种格式存储数据。以多种格式存储数据提高了目标应用程序(您可能不知道它的格式要求)检索存储数据的机会。要在IDataObject 的实例中存储数据,请调用SetData 方法,并在format 参数中指定数据格式。如果您不希望存储数据在检索时被转换成另一种格式,请将autoConvert 参数设置为false。在IDataObject 的一个实例中多次调用SetData,从而以多种格式存储数据。

通过调用 GetData 方法并在format 参数中指定数据格式,可从IDataObject 中检索存储的数据。将autoConvert 参数设置为false,从而只检索以指定格式存储的数据。要将存储的数据转换成指定的格式,请将autoConvert 设置成true,否则不要使用autoConvert

若要确定存储在 IDataObject 中的数据的格式,请使用下面的IDataObject 方法。

1>通过调用 GetFormats 方法可以检索所有用于提供数据的格式构成的数组。将autoConvert 参数设置为false,从而只获取存储数据的格式。要获取数据可用的所有格式,请将autoConvert 设置为true,或不使用该参数。

2>调用 GetDataPresent 方法来确定某种格式的已存储数据是否可用。如果不希望存储数据被转换成指定格式,请将autoConvert 参数设置为false

有关此接口的实现,请参见 DataObject 类。有关预定义Clipboard 数据格式的信息,请参见DataFormats 类。

IDataObject 成员
   
公共方法GetData已重载。检索与指定的数据格式关联的数据。
公共方法GetDataPresent已重载。确定此实例中存储的数据是否与指定的格式关联。
公共方法GetFormats已重载。返回存储在此实例中的数据所关联的或可以转换为的所有格式的列表。
公共方法SetData
DataFormats 类

提供静态的(在 Visual Basic 中是 Shared)、预定义的Clipboard 格式名称。使用它们来标识存储在IDataObject 中的数据的格式。

有关此类型所有成员的列表,请参阅 DataFormats 成员

System.Object
   System.Windows.Forms.DataFormats

[Visual Basic]
Public Class DataFormats

线程安全:此类型的所有公共静态(Visual Basic 中为 Shared)成员是线程安全的。但不保证任何实例成员是线程安全的。

备注:IDataObjectDataObject 类也使用静态的(在 Visual Basic 中是Shared)格式列表来确定从系统Clipboard 中检索到的数据类型,或在拖放操作中转换的数据类型。

GetFormat 方法使您可以:

1>为某个格式名或 ID 号获取预定义的 DataFormats.Format 对象。

2>向该类的静态(在 Visual Basic 中是 Shared)列表中添加新的格式名/ID 号对,并在向该格式传递格式名时使用 Windows 注册表将该格式注册为Clipboard 格式。可以从DataFormats.Format 实例的相应字段中获取id 号或格式name

示例

下面的示例创建一个名为 myFormat 的新数据格式。然后,这段代码创建一个MyNewObject,并将它存储在DataObject 中。将DataObject 复制到Clipboard

然后,将从 Clipboard 检索DataObject 并将恢复MyNewObjectMyNewObject 的值显示在文本框中。这段代码假定已创建textBox1 并已将其放置在窗体上。

[Visual Basic]
Option Explicit
Option Strict

Imports System
Imports System.Windows.Forms

Public Class MyClass1
    Inherits Form
    Private textBox1 As TextBox

    Public Sub MyClipboardMethod()
        ' Creates a new data format.
        Dim myFormat As DataFormats.Format = _
            DataFormats.GetFormat("myFormat")
       
        ' Creates a new object and store it in a DataObject using myFormat
        ' as the type of format.
        Dim myObject As New MyNewObject()
        Dim myDataObject As New DataObject(myFormat.Name, myObject)
       
        ' Copies myObject into the clipboard.
        Clipboard.SetDataObject(myDataObject)
       
        ' Performs some processing steps.
        ' Retrieves the data from the clipboard.
        Dim myRetrievedObject As IDataObject = Clipboard.GetDataObject()
       
        ' Converts the IDataObject type to MyNewObject type.
        Dim myDereferencedObject As MyNewObject = _
            CType(myRetrievedObject.GetData(myFormat.Name), MyNewObject)
       
        ' Print the value of the Object in a textBox.
        textBox1.Text = myDereferencedObject.MyObjectValue
    End Sub 'MyClipboardMethod
End Class 'MyClass


' Creates a new type.
<Serializable()> Public Class MyNewObject
    Inherits Object
    Private myValue As String
   
   
    ' Creates a default constructor for the class.
    Public Sub New()
        myValue = "This is the value of the class"
    End Sub 'New
   
    ' Creates a property to retrieve or set the value.
   
    Public Property MyObjectValue() As String
        Get
            Return myValue
        End Get
        Set
            myValue = value
        End Set
    End Property
End Class 'MyNewObject

  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值