DataObject 类

定义

实现基数据传输机制。

public ref class DataObject : System::Windows::Forms::IDataObject
public ref class DataObject : System::Runtime::InteropServices::ComTypes::IDataObject, System::Windows::Forms::IDataObject
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
public class DataObject : System.Windows.Forms.IDataObject
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
public class DataObject : System.Runtime.InteropServices.ComTypes.IDataObject, System.Windows.Forms.IDataObject
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
type DataObject = class
    interface IDataObject
    interface UnsafeNativeMethods.IOleDataObject
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
type DataObject = class
    interface IDataObject
    interface IDataObject
Public Class DataObject
Implements IDataObject
Public Class DataObject
Implements IDataObject, IDataObject
继承
DataObject
属性
实现

示例

下面的代码示例在一个 DataObject. 首先,会创建一个新 DataObject 组件,并将组件存储在其中。 然后,它会检查相应类型中的数据是否存在于其中 DataObject。 结果显示在文本框中。 此代码要求 textBox1 已创建。

private:
   void AddMyData3()
   {
      // Creates a component to store in the data object.
      Component^ myComponent = gcnew Component;
      
      // Creates a new data object.
      DataObject^ myDataObject = gcnew DataObject;
      
      // Adds the component to the DataObject.
      myDataObject->SetData( myComponent );
      
      // Prints whether data of the specified type is in the DataObject.
      Type^ myType = myComponent->GetType();
      if ( myDataObject->GetDataPresent( myType ) )
      {
         textBox1->Text = String::Concat( "Data of type ", myType,
            " is present in the DataObject" );
      }
      else
      {
         textBox1->Text = String::Concat( "Data of type ", myType,
            " is not present in the DataObject" );
      }
   }
private void AddMyData3() {
    // Creates a component to store in the data object.
    Component myComponent = new Component();
 
    // Creates a new data object.
    DataObject myDataObject = new DataObject();
 
    // Adds the component to the DataObject.
    myDataObject.SetData(myComponent);
 
    // Prints whether data of the specified type is in the DataObject.
    Type myType = myComponent.GetType();
    if(myDataObject.GetDataPresent(myType))
       textBox1.Text = "Data of type " + myType.ToString() + 
       " is present in the DataObject";
    else
       textBox1.Text = "Data of type " + myType.ToString() +
       " is not present in the DataObject";
 }
Private Sub AddMyData3()
    ' Creates a component to store in the data object.
    Dim myComponent As New Component()
    
    ' Creates a new data object.
    Dim myDataObject As New DataObject()
    
    ' Adds the component to the DataObject.
    myDataObject.SetData(myComponent)
    
    ' Prints whether data of the specified type is in the DataObject.
    Dim myType As Type = myComponent.GetType()
    If myDataObject.GetDataPresent(myType) Then
        textBox1.Text = "Data of type " & myType.ToString() & _
            " is present in the DataObject"
    Else
        textBox1.Text = "Data of type " & myType.ToString() & _
            " is not present in the DataObject"
    End If
End Sub

下一个示例检索存储在 a DataObject. 首先,使用文本数据创建一个新 DataObject 项。 然后,检索数据,将其格式指定为字符串,并在文本框中显示。 数据格式会自动从文本转换为字符串。 此代码要求 textBox1 已创建。

void GetMyData2()
{
   // Creates a new data object using a string and the text format.
   DataObject^ myDataObject = gcnew DataObject( DataFormats::Text,"Text to Store" );
   
   // Prints the string in a text box.
   textBox1->Text = myDataObject->GetData( DataFormats::Text )->ToString();
}
private void GetMyData2() {
    // Creates a new data object using a string and the text format.
    DataObject myDataObject = new DataObject(DataFormats.Text, "Text to Store");
 
    // Prints the string in a text box.
    textBox1.Text = myDataObject.GetData(DataFormats.Text).ToString();
 }
Private Sub GetMyData2()
    ' Creates a new data object using a string and the text format.
    Dim myDataObject As New DataObject(DataFormats.Text, "Text to Store")
    
    ' Prints the string in a text box.
    textBox1.Text = myDataObject.GetData(DataFormats.Text).ToString()
End Sub

注解

DataObjectIDataObject实现接口,其方法提供独立于格式的机制进行数据传输。

A DataObject 通常用于 Clipboard 拖放操作。 该 DataObject 类提供接口的建议 IDataObject 实现。 建议使用 DataObject 类而不是自行实现 IDataObject

可以存储在一个 DataObject不同格式的多个数据片段中。 数据通过关联的格式从其 DataObject 检索。 由于目标应用程序可能未知,因此可以通过以多种格式放置数据 DataObject 来增加数据为应用程序采用适当格式的可能性。 请参阅 DataFormats 预定义格式。 可以通过创建类的 DataFormats.Format 实例来实现自己的格式。

若要将数据存储在 a 中 DataObject,请将数据传递给构造函数或调用 SetData。 可以将多种格式的数据添加到同一 DataObject格式。 如果希望仅以本机格式检索所添加的数据, SetData(String, Boolean, Object) 请使用 autoConvert 参数设置为 调用 false

可以从与任何格式兼容的GetData格式检索DataObject数据。 例如,文本可以转换为 Unicode。 To retrieve data in the format in which it was stored, call GetData with the autoConvert parameter set to false.

若要确定存储数据的格式,请调用 GetFormats。 若要确定格式是否可用,请使用所需的格式进行调用 GetDataPresent

在 .NET Framework 2.0 中,该DataObject类提供了其他方法,使使用常用格式的数据更易于使用。 若要向 添加特定格式 DataObject的数据,请使用相应的 SetFormat 方法,例如 SetText。 若要从中DataObject检索特定格式的数据,请首先调用相应的 Format 方法 ((如 ContainsText) ),以确定该格式中的数据是否DataObject包含该格式,然后调用相应的 Contains``GetFormat 方法 (,例如GetText) ,以在包含数据时DataObject检索数据。

备注

在剪贴板中使用图元文件格式时,可能需要特殊注意事项。 由于类的当前实现DataObject存在限制,.NET Framework使用元文件格式的应用程序可能无法识别.NET Framework使用的图元文件格式。 在这种情况下,必须与 Win32 剪贴板应用程序编程接口互操作, (API) 。

对象必须可序列化,才能将其放在剪贴板上。 有关详细信息,请参阅 System.Runtime.Serialization 序列化。 如果目标应用程序需要非常具体的数据格式,则序列化过程中添加到数据中的标头可能会阻止应用程序识别数据。 若要保留数据格式,请将数据添加为Byte数组并将其MemoryStream传递给MemoryStreamSetData方法。

构造函数

DataObject()

初始化 DataObject 类的新实例。

DataObject(Object)

初始化 DataObject 类的新实例,并为其添加指定的对象。

DataObject(String, Object)

初始化 DataObject 类的新实例,并以指定格式为其添加指定的对象。

方法

ContainsAudio()

指示此数据对象是否包含 WaveAudio 格式的数据。

ContainsFileDropList()

指示此数据对象是否包含 FileDrop 格式的数据,或者是否包含可以转换为该格式的数据。

ContainsImage()

指示此数据对象是否包含 Bitmap 格式的数据,或者是否包含可以转换为该格式的数据。

ContainsText()

指示此数据对象是否包含 UnicodeText 格式的数据。

ContainsText(TextDataFormat)

指示此数据对象是否包含由指定的 TextDataFormat 值表示的格式的文本数据。

Equals(Object)

确定指定对象是否等于当前对象。

(继承自 Object)
GetAudioStream()

检索此数据对象中的音频流。

GetData(String)

返回与所指定数据格式关联的数据。

GetData(String, Boolean)

返回与所指定数据格式关联的数据,使用自动转换参数来确定是否将数据转换为此格式。

GetData(Type)

返回与所指定类类型格式关联的数据。

GetDataPresent(String)

确定此 DataObject 中存储的数据是否与指定的格式关联,或是否可以转换成指定的格式。

GetDataPresent(String, Boolean)

确定此 DataObject 是否包含指定格式的数据,或者是否包含可以转换为指定格式的数据,后者可选。

GetDataPresent(Type)

确定此 DataObject 中存储的数据是否与指定的格式关联,或是否可以转换成指定的格式。

GetFileDropList()

检索此数据对象中文件名的集合。

GetFormats()

返回存储在此 DataObject 中的数据所关联的或可以转换为的所有格式的列表。

GetFormats(Boolean)

返回存储在此 DataObject 中的数据所关联的或可以转换为的所有格式的列表,同时使用自动转换参数来确定是只检索本机数据格式,还是检索此数据可以转换为的所有格式。

GetHashCode()

作为默认哈希函数。

(继承自 Object)
GetImage()

检索此数据对象中的图像。

GetText()

检索此数据对象中 UnicodeText 格式的文本数据。

GetText(TextDataFormat)

检索此数据对象中由指定的 TextDataFormat 值表示的格式的文本数据。

GetType()

获取当前实例的 Type

(继承自 Object)
MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
SetAudio(Byte[])

在将 Byte 数组转换为 WaveAudio 之后,将其以 Stream 格式添加到此数据对象。

SetAudio(Stream)

StreamWaveAudio 格式添加到此数据对象。

SetData(Object)

使用对象类型作为数据格式将指定对象添加到 DataObject

SetData(String, Boolean, Object)

使用指定格式将指定对象添加到 DataObject 并指示这些数据是否可以转换为其他格式。

SetData(String, Object)

使用指定格式将指定对象添加到 DataObject

SetData(Type, Object)

使用指定类型作为格式将指定对象添加到 DataObject

SetFileDropList(StringCollection)

将文件名的集合以 FileDrop 格式添加到此数据对象。

SetImage(Image)

ImageBitmap 格式添加到此数据对象。

SetText(String)

将文本数据以 UnicodeText 格式添加到此数据对象。

SetText(String, TextDataFormat)

将文本数据以指定的 TextDataFormat 值表示的格式添加到此数据对象。

ToString()

返回表示当前对象的字符串。

(继承自 Object)

显式接口实现

IDataObject.DAdvise(FORMATETC, ADVF, IAdviseSink, Int32)

在数据对象和通知接收器之间创建连接。 此方法由对象进行调用,该对象支持通知接收器并使通知接收器能收到有关对象数据中的更改的通知。

IDataObject.DUnadvise(Int32)

销毁以前建立的通知连接。

IDataObject.EnumDAdvise(IEnumSTATDATA)

创建可用于对当前的通知连接进行枚举的对象。

IDataObject.EnumFormatEtc(DATADIR)

创建一个用于枚举数据对象的 FORMATETC 结构的对象。 这些结构用于对 GetData(FORMATETC, STGMEDIUM)SetData(FORMATETC, STGMEDIUM, Boolean) 的调用中。

IDataObject.GetCanonicalFormatEtc(FORMATETC, FORMATETC)

提供一个在逻辑上与更复杂的结构等效的标准 FORMATETC 结构。 使用此方法可以确定两个不同的 FORMATETC 结构是否将返回相同的数据,从而无需重复呈现。

IDataObject.GetData(FORMATETC, STGMEDIUM)

从源数据对象中获取数据。 数据使用者调用的 GetData(FORMATETC, STGMEDIUM) 方法将呈现指定的 FORMATETC 结构中描述的数据,并通过指定的 STGMEDIUM 结构传输该数据。 然后,调用方对释放 STGMEDIUM 结构的责任进行假定。

IDataObject.GetDataHere(FORMATETC, STGMEDIUM)

从源数据对象中获取数据。 数据使用者调用的此方法与 GetData(FORMATETC, STGMEDIUM) 方法的区别在于调用方必须分配并释放指定的存储介质。

IDataObject.QueryGetData(FORMATETC)

确定数据对象是否能够呈现 FORMATETC 结构中所描述的数据。 尝试执行粘贴或删除操作的对象可以在调用 GetData(FORMATETC, STGMEDIUM) 来获取操作是否成功的指示之前调用此方法。

IDataObject.SetData(FORMATETC, STGMEDIUM, Boolean)

将数据传输至实现此方法的对象。 此方法由包含数据源的对象调用。

适用于

另请参阅