Share via


방법: 클립보드에서 데이터 검색

Clipboard 클래스는 Windows 운영 체제의 클립보드 기능과 상호 작용하는 데 사용할 수 있는 메서드를 제공합니다. 많은 응용 프로그램에서 클립보드를 데이터에 대한 임시 리포지토리로 사용합니다. 예를 들어, 워드 프로세서에서는 잘라내기/붙여넣기 작업 중 클립보드를 사용합니다. 또한 클립보드는 한 응용 프로그램에서 다른 응용 프로그램으로 정보를 전송하는 데 유용합니다.

일부 응용 프로그램에서는 데이터를 더 많은 응용 프로그램에서 사용할 수 있도록 하기 위해 데이터를 여러 형식으로 클립보드에 저장합니다. 클립보드 형식은 형식을 식별하는 문자열입니다. 식별된 해당 형식을 사용하는 응용 프로그램에서는 클립보드에서 관련 데이터를 검색할 수 있습니다. DataFormats 클래스는 사용할 수 있는 미리 정의된 형식 이름을 제공합니다. 또한 고유한 형식 이름을 사용하거나 개체의 형식을 대신 사용할 수 있습니다. 데이터를 클립보드에 추가하는 방법에 대한 자세한 내용은 방법: 클립보드에 데이터 추가를 참조하십시오.

클립보드에 특정 형식의 데이터가 들어 있는지 확인하려면 ContainsFormat 메서드 중 하나 또는 GetData 메서드를 사용합니다. 클립보드의 데이터를 검색하려면 GetFormat 메서드 중 하나 또는 GetData 메서드를 사용합니다. 이러한 메서드는 .NET Framework 버전 2.0에서 새로 도입된 메서드입니다.

.NET Framework 2.0 이전 버전을 사용하여 클립보드의 데이터에 액세스하려면 GetDataObject 메서드를 사용하여 반환된 IDataObject의 메서드를 호출합니다. 예를 들어, 반환된 개체에서 특정 형식을 사용할 수 있는지 확인하려면 GetDataPresent 메서드를 호출합니다.

참고

모든 Windows 기반 응용 프로그램은 시스템 클립보드를 공유합니다. 따라서 다른 응용 프로그램으로 전환하면 클립보드 내용이 변경될 수 있습니다.

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

클립보드에서 일반적인 단일 형식의 데이터를 검색하려면

  • GetAudioStream, GetFileDropList, GetImage 또는 GetText 메서드를 사용합니다. 필요에 따라 먼저 해당 ContainsFormat 메서드를 사용하여 데이터를 특정 형식으로 사용할 수 있는지 여부를 확인합니다. 이러한 메서드는 .NET Framework 버전 2.0에서만 사용할 수 있습니다.

    ' Demonstrates SetAudio, ContainsAudio, and GetAudioStream.
    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 SetFileDropList, ContainsFileDroList, and GetFileDropList
    Public Function SwapClipboardFileDropList(ByVal replacementList _
        As System.Collections.Specialized.StringCollection) _
        As System.Collections.Specialized.StringCollection
    
        Dim returnList As System.Collections.Specialized.StringCollection _
            = Nothing
    
        If Clipboard.ContainsFileDropList() Then
    
            returnList = Clipboard.GetFileDropList()
            Clipboard.SetFileDropList(replacementList)
        End If
    
        Return returnList
    
    End Function
    
    ' Demonstrates SetImage, ContainsImage, and GetImage.
    Public Function SwapClipboardImage( _
        ByVal replacementImage As System.Drawing.Image) _
        As System.Drawing.Image
    
        Dim returnImage As System.Drawing.Image = Nothing
    
        If Clipboard.ContainsImage() Then
            returnImage = Clipboard.GetImage()
            Clipboard.SetImage(replacementImage)
        End If
    
        Return returnImage
    End Function
    
    ' Demonstrates SetText, ContainsText, and GetText.
    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
    
    // Demonstrates SetAudio, ContainsAudio, and GetAudioStream.
    public System.IO.Stream SwapClipboardAudio(
        System.IO.Stream replacementAudioStream)
    {
        System.IO.Stream returnAudioStream = null;
        if (Clipboard.ContainsAudio())
        {
            returnAudioStream = Clipboard.GetAudioStream();
            Clipboard.SetAudio(replacementAudioStream);
        }
        return returnAudioStream;
    }
    
    // Demonstrates SetFileDropList, ContainsFileDroList, and GetFileDropList
    public System.Collections.Specialized.StringCollection
        SwapClipboardFileDropList(
        System.Collections.Specialized.StringCollection replacementList)
    {
        System.Collections.Specialized.StringCollection returnList = null;
        if (Clipboard.ContainsFileDropList())
        {
            returnList = Clipboard.GetFileDropList();
            Clipboard.SetFileDropList(replacementList);
        }
        return returnList;
    }
    
    // Demonstrates SetImage, ContainsImage, and GetImage.
    public System.Drawing.Image SwapClipboardImage(
        System.Drawing.Image replacementImage)
    {
        System.Drawing.Image returnImage = null;
        if (Clipboard.ContainsImage())
        {
            returnImage = Clipboard.GetImage();
            Clipboard.SetImage(replacementImage);
        }
        return returnImage;
    }
    
    // Demonstrates SetText, ContainsText, and GetText.
    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;
    }
    

클립보드에서 사용자 지정 형식의 데이터를 검색하려면

  • GetData 메서드를 사용자 지정 형식 이름과 함께 사용합니다. 이 메서드는 .NET Framework 버전 2.0에서만 사용할 수 있습니다.

    또한 미리 정의된 형식 이름을 SetData 메서드와 함께 사용할 수 있습니다. 자세한 내용은 DataFormats를 참조하십시오.

    ' Demonstrates SetData, ContainsData, and GetData
    ' using a custom format name and a business object.
    Public ReadOnly Property TestCustomFormat() As Customer
        Get
            Clipboard.SetData("CustomerFormat", New Customer("Customer Name"))
    
            If Clipboard.ContainsData("CustomerFormat") Then
                Return CType(Clipboard.GetData("CustomerFormat"), Customer)
            End If
    
            Return Nothing
        End Get
    End Property
    
    
    ...
    
    
    <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
    
    // Demonstrates SetData, ContainsData, and GetData
    // using a custom format name and a business object.
    public Customer TestCustomFormat
    {
        get
        {
            Clipboard.SetData("CustomerFormat", new Customer("Customer Name"));
            if (Clipboard.ContainsData("CustomerFormat")) 
            {
                return Clipboard.GetData("CustomerFormat") as Customer;
            }
            return null;
        }
    }
    
    
    ...
    
    
    [Serializable]
    public class Customer
    {
        private string nameValue = string.Empty;
        public Customer(String name)
        {
            nameValue = name;
        }
        public string Name
        {
            get { return nameValue; }
            set { nameValue = value; }
        }
    }
    

클립보드에서 여러 형식의 데이터를 검색하려면

  • GetDataObject 메서드를 사용하십시오. .NET Framework 2.0 이전 버전에서 클립보드의 데이터를 검색하려면 이 메서드를 사용해야 합니다.

    ' Demonstrates how to use a DataObject to add
    ' data to the Clipboard in multiple formats.
    Public Sub TestClipboardMultipleFormats()
    
        Dim data As New DataObject()
    
        ' Add a Customer object using the type as the format.
        data.SetData(New Customer("Customer as Customer object"))
    
        ' Add a ListViewItem object using a custom format name.
        data.SetData("CustomFormat", _
            New ListViewItem("Customer as ListViewItem"))
    
        Clipboard.SetDataObject(data)
        Dim retrievedData As DataObject = _
            CType(Clipboard.GetDataObject(), DataObject)
    
        If (retrievedData.GetDataPresent("CustomFormat")) Then
    
            Dim item As ListViewItem = _
                TryCast(retrievedData.GetData("CustomFormat"), ListViewItem)
    
            If item IsNot Nothing Then
                MessageBox.Show(item.Text)
            End If
    
        End If
    
        If retrievedData.GetDataPresent(GetType(Customer)) Then
    
            Dim customer As Customer = _
                CType(retrievedData.GetData(GetType(Customer)), Customer)
    
            If customer IsNot Nothing Then
    
                MessageBox.Show(customer.Name)
            End If
    
        End If
    
    End Sub
    
    
    ...
    
    
    <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
    
    // Demonstrates how to use a DataObject to add
    // data to the Clipboard in multiple formats.
    public void TestClipboardMultipleFormats()
    {
        DataObject data = new DataObject();
    
        // Add a Customer object using the type as the format.
        data.SetData(new Customer("Customer as Customer object"));
    
        // Add a ListViewItem object using a custom format name.
        data.SetData("CustomFormat", 
            new ListViewItem("Customer as ListViewItem"));
    
        Clipboard.SetDataObject(data);
        DataObject retrievedData = (DataObject)Clipboard.GetDataObject();
    
        if (retrievedData.GetDataPresent("CustomFormat"))
        {
            ListViewItem item = 
                retrievedData.GetData("CustomFormat") as ListViewItem;
            if (item != null)
            {
                MessageBox.Show(item.Text);
            }
        }
    
        if (retrievedData.GetDataPresent(typeof(Customer)))
        {
            Customer customer = 
                retrievedData.GetData(typeof(Customer)) as Customer;
            if (customer != null)
            {
                MessageBox.Show(customer.Name);
            }
        }
    }
    
    
    ...
    
    
    [Serializable]
    public class Customer
    {
        private string nameValue = string.Empty;
        public Customer(String name)
        {
            nameValue = name;
        }
        public string Name
        {
            get { return nameValue; }
            set { nameValue = value; }
        }
    }
    

참고 항목

작업

방법: 클립보드에 데이터 추가

기타 리소스

끌어서 놓기 작업 및 클립보드 지원