다음을 통해 공유


DataObject 클래스

기본 데이터 전송 메커니즘을 구현합니다.

네임스페이스: System.Windows.Forms
어셈블리: System.Windows.Forms(system.windows.forms.dll)

구문

‘선언
<ClassInterfaceAttribute(ClassInterfaceType.None)> _
Public Class DataObject
    Implements IDataObject, IDataObject
‘사용 방법
Dim instance As DataObject
[ClassInterfaceAttribute(ClassInterfaceType.None)] 
public class DataObject : IDataObject, IDataObject
[ClassInterfaceAttribute(ClassInterfaceType::None)] 
public ref class DataObject : IDataObject, IDataObject
/** @attribute ClassInterfaceAttribute(ClassInterfaceType.None) */ 
public class DataObject implements IDataObject, IDataObject
ClassInterfaceAttribute(ClassInterfaceType.None) 
public class DataObject implements IDataObject, IDataObject

설명

DataObject는 해당 메서드가 데이터 전송에 대한 형식 독립적 메커니즘을 제공하는 IDataObject 인터페이스를 구현합니다.

DataObject는 일반적으로 시스템 Clipboard 및 끌어서 놓기 작업에서 사용됩니다. DataObject 클래스는 IDataObject 인터페이스의 권장 구현입니다. 직접 IDataObject를 구현하지 말고 DataObject 클래스를 사용하는 것이 좋습니다.

다양한 형식의 여러 데이터를 DataObject에 저장할 수 있습니다. 데이터는 관련 형식에 따라 DataObject에서 검색됩니다. 대상 응용 프로그램을 모르는 경우가 있을 수 있으므로 DataObject에서 데이터를 여러 형식으로 배치하면 데이터가 응용 프로그램의 해당 형식 내에 있을 가능성이 높아집니다. 미리 정의된 형식에 대한 자세한 내용은 DataFormats를 참조하십시오. DataFormats.Format 클래스의 인스턴스를 만들어 사용자 형식을 구현할 수 있습니다.

DataObject에 데이터를 저장하려면 생성자에 데이터를 전달하거나 SetData를 호출합니다. 여러 형식의 데이터를 같은 DataObject에 추가할 수 있습니다. 추가하는 데이터를 네이티브 형식으로만 검색하려면 autoConvert 매개 변수를 false로 설정하여 SetData(String,Boolean,Object)를 호출합니다.

GetData와 호환 가능한 모든 형식으로 DataObject에서 데이터를 검색할 수 있습니다. 예를 들어, 텍스트를 유니코드로 변환할 수 있습니다. 데이터를 저장된 형식으로 검색하려면 autoConvert 매개 변수를 false로 설정한 상태에서 GetData를 호출합니다.

데이터 저장 형식을 확인하려면 GetFormats를 호출하고 형식의 사용 가능 여부를 확인하려면 원하는 형식을 포함하는 GetDataPresent를 호출합니다.

Microsoft .NET Framework version 2.0에서 DataObject 클래스는 일반 형식의 데이터 관련 작업에 도움이 되는 추가 메서드를 제공합니다. 특정 형식의 데이터를 DataObject에 추가하려면 SetText와 같은 적절한 SetFormat 메서드를 사용합니다. DataObject에서 특정 형식의 데이터를 검색하려면 먼저 ContainsText와 같은 적절한 ContainsFormat 메서드를 호출하여 DataObject에 해당 형식의 데이터가 포함되어 있는지 확인한 다음 DataObject에 해당 데이터가 포함되어 있으면 GetText와 같은 적절한 GetFormat 메서드를 호출하여 데이터를 검색합니다.

참고

클립보드에서 메타파일 형식을 사용하는 경우 특별한 사항을 고려해야 할 수 있습니다. 현재 DataObject 클래스 구현의 제한 때문에 .NET Framework에서 사용하는 메타파일 형식을 이전 메타파일 형식을 사용하는 응용 프로그램에서 인식하지 못할 수 있습니다. 이 경우 Win32 클립보드 API(응용 프로그래밍 인터페이스)와 상호 운용해야 합니다. 자세한 내용은 https://support.microsoft.com. Microsoft 기술 자료 문서 323530, "Metafiles on Clipboard Are Not Visible to All Applications"를 참조하십시오.

개체를 클립보드에 배치하려면 serialize할 수 있어야 합니다. serialization에 대한 자세한 내용은 Serialization를 참조하십시오. 대상 응용 프로그램에 매우 특정한 데이터 형식이 필요한 경우 serialization 프로세스에서 데이터에 추가된 헤더 때문에 응용 프로그램에서 데이터를 인식하지 못할 수 있습니다. 데이터 형식을 보존하려면 데이터를 Byte 배열로 MemoryStream에 추가하고 MemoryStreamSetData 메서드에 전달합니다.

예제

다음 코드 예제에서는 DataObject에 데이터를 추가합니다. 먼저 새 DataObject를 만들고 여기에 구성 요소를 저장합니다. 그런 다음 DataObject에 해당 형식의 데이터가 존재하는지 여부를 확인합니다. 결과가 텍스트 상자에 표시됩니다. 이 코드를 실행하려면 textBox1이 만들어진 상태여야 합니다.

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 'AddMyData3
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:
   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.set_Text("Data of type " + myType.ToString() 
            + " is present in the DataObject");
    }
    else {
        textBox1.set_Text("Data of type " + myType.ToString() 
            + " is not present in the DataObject");
    }
} //AddMyData3

다음 예제에서는 DataObject에 저장된 데이터를 검색합니다. 먼저 텍스트 데이터로 새 DataObject를 만듭니다. 그러면 해당 형식이 문자열로 지정되어 데이터가 검색되고 텍스트 상자에 표시됩니다. 데이터 형식은 텍스트에서 문자열로 자동 변환됩니다. 이 코드를 실행하려면 textBox1이 만들어진 상태여야 합니다.

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("System.String").ToString()
End Sub 'GetMyData2
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("System.String").ToString();
 }
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( "System.String" )->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.set_Text(myDataObject.GetData("System.String").ToString());
} //GetMyData2

상속 계층 구조

System.Object
  System.Windows.Forms.DataObject

스레드로부터의 안전성

이 형식의 모든 public static(Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 인터페이스 멤버는 스레드로부터 안전하지 않습니다.

플랫폼

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.

버전 정보

.NET Framework

2.0, 1.1, 1.0에서 지원

.NET Compact Framework

2.0에서 지원

참고 항목

참조

DataObject 멤버
System.Windows.Forms 네임스페이스
Clipboard 클래스
IDataObject
DataFormats 클래스