다음을 통해 공유


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

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

일부 애플리케이션은 여러 형식의 클립보드에 데이터를 저장하여 잠재적으로 그 데이터를 사용할 수 있는 다른 애플리케이션 수를 증가시킵니다. 클립보드 형식은 형식을 식별하는 문자열입니다. 식별된 형식을 사용하는 애플리케이션은 클립보드에서 연관된 데이터를 검색할 수 있습니다. DataFormats 클래스는 사용자의 사용에 맞게 미리 정의된 형식 이름을 제공합니다. 또한 사용자 자신의 형식 이름을 사용하거나 개체의 유형을 개체의 형식으로 사용할 수 있습니다. 클립보드에 데이터를 추가하는 방법에 대한 자세한 내용은 방법: 클립보드에 데이터 추가를 참조하세요.

클립보드가 특정 형식의 데이터를 포함하는지 여부를 확인하려면 ContainsFormat 메서드 또는 GetData 메서드 중 하나를 사용합니다. 클립보드에서 데이터를 검색하려면 GetFormat 메서드 또는 GetData 메서드 중 하나를 사용합니다. 이러한 메서드는 .NET Framework 2.0에서 처음 소개되었습니다.

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

참고

모든 Windows 기반 애플리케이션은 시스템 클립보드를 공유합니다. 따라서, 다른 애플리케이션으로 전환할 때 내용은 변경될 수 있습니다.

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

단일 공통 형식으로 클립보드에서 데이터를 검색하려면

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

    // 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;
    }
    
    ' 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
    

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

  1. 사용자 지정 형식 이름으로 GetData 메서드를 사용합니다. 이 메서드는 .NET Framework 2.0에서만 사용할 수 있습니다.

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

    // 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;
        }
    }
    
    ' 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 string nameValue = string.Empty;
        public Customer(String name)
        {
            nameValue = name;
        }
        public string Name
        {
            get { return nameValue; }
            set { nameValue = value; }
        }
    }
    
    <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
    

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

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

    // 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);
            }
        }
    }
    
    ' 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 string nameValue = string.Empty;
        public Customer(String name)
        {
            nameValue = name;
        }
        public string Name
        {
            get { return nameValue; }
            set { nameValue = value; }
        }
    }
    
    <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
    

참고 항목