다음을 통해 공유


Clipboard 클래스

시스템 클립보드에서 데이터를 배치하고 검색하는 메서드를 제공합니다. 이 클래스는 상속될 수 없습니다.

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

구문

‘선언
Public NotInheritable Class Clipboard
‘사용 방법
Dim instance As Clipboard
public sealed class Clipboard
public ref class Clipboard sealed
public final class Clipboard
public final class Clipboard

설명

Clipboard 클래스에서 사용할 미리 정의된 형식의 목록을 보려면 DataFormats 클래스를 참조하십시오.

SetDataObject를 호출하여 클립보드에 데이터를 배치합니다. 데이터의 영구 복사본을 클립보드에 배치하려면 copy 매개 변수를 true로 설정합니다.

참고

사용자가 확실히 모르는 형식 요구 사항을 가진 대상 응용 프로그램에서 데이터를 검색할 수 있는 가능성을 최대화하려면 여러 형식의 데이터를 클립보드에 배치합니다.

GetDataObject를 호출하여 클립보드에서 데이터를 검색합니다. 데이터는 IDataObject 인터페이스를 구현하는 개체로 반환됩니다. DataFormats의 필드와 IDataObject가 지정한 메서드를 사용하여 개체에서 데이터를 추출합니다. 검색한 데이터의 형식을 모르는 경우 IDataObject 인터페이스의 GetFormats 메서드를 호출하여 모든 데이터 저장 형식에 대한 목록을 가져옵니다. 그런 다음 IDataObject 인터페이스의 GetData 메서드를 호출하고 해당 응용 프로그램에서 사용할 수 있는 형식을 지정합니다.

Microsoft .NET Framework version 2.0에서 Clipboard 클래스는 시스템 클립보드 관련 작업에 도움이 되는 추가 메서드를 제공합니다. 클립보드에서 데이터를 모두 제거하려면 Clear 메서드를 호출합니다. 클립보드에 특정 형식의 데이터를 추가하려면 SetText와 같은 적절한 SetFormat 메서드를 호출하고 형식을 지정하려면 SetData 메서드를 호출합니다. 클립보드에서 특정 형식의 데이터를 검색하려면 먼저 ContainsText와 같은 적절한 ContainsFormat 메서드를 호출하여 클립보드에 해당 형식의 데이터가 포함되어 있는지 확인한 다음 클립보드에 해당 데이터가 포함된 경우 GetText와 같은 적절한 GetFormat 메서드를 호출하여 데이터를 검색합니다. 이러한 작업에서 형식을 지정하려면 ContainsDataGetData 메서드를 대신 호출합니다.

참고

모든 Windows 기반 응용 프로그램은 시스템 클립보드를 공유하므로 다른 응용 프로그램으로 전환하는 경우 해당 내용이 변경될 수 있습니다.

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

Clipboard 클래스는 STA(단일 스레드 아파트) 모드로 설정된 스레드에서만 사용할 수 있습니다. 이 클래스를 사용하려면 Main 메서드가 STAThreadAttribute 특성으로 표시되어 있는지 확인해야 합니다.

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

Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows CE 플랫폼 참고: Windows CE에서는 원래 메모리 스트림의 끝에 바이트가 추가될 수 있기 때문에 클립보드에서 붙여넣은 메모리 스트림의 크기가 클립보드에 복사한 메모리 스트림의 크기보다 약간 클 수 있습니다. 메모리 스트림을 정확하게 검색하려면 개체를 받는 방법을 확인하기 위해 개체 앞에 그 크기를 붙이거나 메모리 스트림과 그 크기에 대한 문자열 값을 포함하여 클립보드에 DataObject를 복사합니다.

예제

다음 코드 예제에서는 Clipboard 메서드를 사용하여 시스템 클립보드에서 데이터를 배치하고 검색합니다. 이 코드는 button1, button2, textBox1textBox2가 만들어진 후 해당 폼에 배치되었다고 가정합니다.

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)
    Else
        textBox2.Text = "No text selected in textBox1"
    End If
End Sub 'button1_Click
 
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
private void button1_Click(object sender, System.EventArgs e) {
    // Takes the selected text from a text box and puts it on the clipboard.
    if(textBox1.SelectedText != "")
       Clipboard.SetDataObject(textBox1.SelectedText);
    else
       textBox2.Text = "No text selected in textBox1";
 }
 
 private void button2_Click(object sender, System.EventArgs e) {
    // Declares an IDataObject to hold the data returned from the clipboard.
    // Retrieves the data from the clipboard.
    IDataObject iData = Clipboard.GetDataObject();
 
    // Determines whether the data is in a format you can use.
    if(iData.GetDataPresent(DataFormats.Text)) {
       // Yes it is, so display it in a text box.
       textBox2.Text = (String)iData.GetData(DataFormats.Text); 
    }
    else {
       // No it is not.
       textBox2.Text = "Could not retrieve data off the clipboard.";
    }
 }
 
private:
   void button1_Click( Object^ /*sender*/, System::EventArgs^ /*e*/ )
   {
      // Takes the selected text from a text box and puts it on the clipboard.
      if ( !textBox1->SelectedText->Equals( "" ) )
      {
         Clipboard::SetDataObject( textBox1->SelectedText );
      }
      else
      {
         textBox2->Text = "No text selected in textBox1";
      }
   }

   void button2_Click( Object^ /*sender*/, System::EventArgs^ /*e*/ )
   {
      // Declares an IDataObject to hold the data returned from the clipboard.
      // Retrieves the data from the clipboard.
      IDataObject^ iData = Clipboard::GetDataObject();
      
      // Determines whether the data is in a format you can use.
      if ( iData->GetDataPresent( DataFormats::Text ) )
      {
         // Yes it is, so display it in a text box.
         textBox2->Text = (String^)(iData->GetData( DataFormats::Text ));
      }
      else
      {
         // No it is not.
         textBox2->Text = "Could not retrieve data off the clipboard.";
      }
   }
private void button1_Click(Object sender, System.EventArgs e)
{
    // Takes the selected text from a text box and puts it on the clipboard.
    if (!textBox1.get_SelectedText().Equals("")) {
        Clipboard.SetDataObject(textBox1.get_SelectedText());
    }
    else {
        textBox2.set_Text("No text selected in textBox1");
    }
} //button1_Click

private void button2_Click(Object sender, System.EventArgs e)
{
    // Declares an IDataObject to hold the data returned from the clipboard.
    // Retrieves the data from the clipboard.
    IDataObject iData = Clipboard.GetDataObject();

    // Determines whether the data is in a format you can use.
    if (iData.GetDataPresent(DataFormats.Text)) {
        // Yes it is, so display it in a text box.
        textBox2.set_Text((String)(iData.GetData(DataFormats.Text)));
    }
    else {
        // No it is not.
        textBox2.set_Text("Could not retrieve data off the clipboard.");
    }
} //button2_Click
private function button1_Click(sender : Object, e : System.EventArgs) {
    //Take the selected text from a text box and put it on the clipboard.
    if(textBox1.SelectedText != "")
       Clipboard.SetDataObject(textBox1.SelectedText);
    else
       textBox2.Text = "No text selected in textBox1";
 }
 
 private function button2_Click(sender : Object, e : System.EventArgs) {
    //Declare an IDataObject to hold the data returned from the clipboard.
    //Then retrieve the data from the clipboard.
    var iData : IDataObject = Clipboard.GetDataObject();
 
    //Determine whether the data is in a format you can use.
    if(iData.GetDataPresent(DataFormats.Text)) {
       //Yes it is, so display it in a text box.
       textBox2.Text = String(iData.GetData(DataFormats.Text)); 
    }
    else {
       //No it is not.
       textBox2.Text = "Could not retrieve data off the clipboard.";
    }
 }
 

상속 계층 구조

System.Object
  System.Windows.Forms.Clipboard

스레드로부터의 안전성

이 형식의 모든 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에서 지원

참고 항목

참조

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

기타 리소스

Windows Forms의 추가 보안 고려 사항