Share via


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

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

데이터를 클립보드에 추가할 때 데이터 형식을 나타낼 수 있습니다. 이렇게 하면 다른 응용 프로그램에서 해당 형식을 사용할 수 있을 경우에만 해당 데이터가 인식됩니다. 또한 데이터를 다양한 형식으로 클립보드에 추가하여 데이터를 사용할 수 있는 다른 응용 프로그램의 수를 늘릴 수 있습니다.

클립보드 형식은 해당 형식을 사용하는 응용 프로그램에서 연결된 데이터를 검색할 수 있도록 형식을 식별하는 문자열입니다. DataFormats 클래스는 사용할 수 있는 미리 정의된 형식 이름을 제공합니다. 또한 고유한 형식 이름을 사용하거나 개체의 형식을 대신 사용할 수 있습니다.

하나 이상의 형식으로 데이터를 클립보드에 추가하려면 SetDataObject 메서드를 사용합니다. 이 메서드에는 아무 개체나 전달할 수 있지만 데이터를 여러 형식으로 추가하려면 먼저 여러 형식에 대해 작동하도록 설계된 별도의 개체에 데이터를 추가해야 합니다. 일반적으로는 데이터를 DataObject에 추가하지만 IDataObject 인터페이스를 구현하는 형식을 사용할 수도 있습니다.

.NET Framework 버전 2.0에서는 기본 클립보드 작업을 쉽게 수행할 수 있도록 설계된 새 메서드를 사용하여 데이터를 클립보드에 직접 추가할 수 있습니다. 이러한 메서드는 텍스트 같은 일반적인 단일 형식의 데이터를 처리하는 경우에만 사용합니다.

참고

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

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

개체는 serialize 가능해야 클립보드에 넣을 수 있습니다. 형식을 serialize 가능하게 만들려면 형식을 SerializableAttribute 특성으로 표시합니다. Clipboard 메서드에 serialize할 수 없는 개체를 전달하면 메서드가 예외를 throw하지 않고 실패합니다. Serialization에 대한 자세한 내용은 System.Runtime.Serialization을 참조하십시오.

일반적인 단일 형식으로 클립보드에 데이터를 추가하려면

  • SetAudio, SetFileDropList, SetImage 또는 SetText 메서드를 사용합니다. 이러한 메서드는 .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;
    }
    

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

  • SetData 메서드를 사용자 지정 형식 이름과 함께 사용합니다. 이 메서드는 .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; }
        }
    }
    

여러 형식으로 클립보드에 데이터를 추가하려면

  • SetDataObject 메서드를 사용하여 데이터가 포함된 DataObject를 전달합니다. .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; }
        }
    }
    

참고 항목

작업

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

기타 리소스

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