방법: 클립보드에 데이터 추가
Clipboard 클래스는 Windows 운영 체제 클립보드 기능과 상호 작용하는 데 사용할 수 있는 메서드를 제공합니다. 많은 애플리케이션이 클립보드를 데이터의 임시 리포지토리로 사용합니다. 예를 들어 워드 프로세서는 클립보드를 잘라낸 후 붙여넣기 작업 중 사용합니다. 또한 클립보드는 한 애플리케이션에서 다른 애플리케이션으로 데이터를 전송하는 데 유용합니다.
클립보드에 데이터를 추가할 때 다른 애플리케이션에서 해당 형식을 사용할 수 있는 경우 데이터를 인식할 수 있도록 데이터 형식을 나타낼 수 있습니다. 또한 데이터를 잠재적으로 사용할 수 있는 다른 애플리케이션의 수를 늘리기 위해 여러 다른 형식으로 데이터를 클립보드에 추가할 수 있습니다.
클립보드 형식은 해당 형식을 사용하는 애플리케이션이 연결된 데이터를 검색할 수 있도록 형식을 식별하는 문자열입니다. DataFormats 클래스는 사용자의 사용에 맞게 미리 정의된 형식 이름을 제공합니다. 또한 사용자 자신의 형식 이름을 사용하거나 개체의 유형을 개체의 형식으로 사용할 수 있습니다.
하나 이상의 형식으로 클립보드에 데이터를 추가하려면 SetDataObject 메서드를 사용합니다. 이 메서드에 개체를 전달할 수 있지만 여러 형식으로 데이터를 추가하려면 먼저 여러 형식으로 작동하도록 설계된 별도의 개체에 데이터를 추가해야 합니다. 일반적으로 데이터를 DataObject에 추가하지만 IDataObject 인터페이스를 구현하는 모든 형식을 사용할 수 있습니다.
하나의 공통된 형식으로 클립보드에 데이터를 추가하려면 텍스트에 대한 SetText와 같은 해당 형식에 대한 특정 메서드를 사용합니다.
참고 항목
모든 Windows 기반 애플리케이션은 클립보드를 공유합니다. 따라서 다른 애플리케이션으로 전환할 때 콘텐츠는 변경될 수 있습니다.
Clipboard 클래스는 STA(단일 스레드 아파트) 모드로 설정된 스레드에서만 사용될 수 있습니다. 이 클래스를 사용하려면 Main
메서드가 STAThreadAttribute 특성으로 표시되었는지 확인하세요.
개체를 클립보드에 배치할 수 있도록 직렬화가 가능해야 합니다. 형식을 직렬화할 수 있도록 하려면 SerializableAttribute 특성으로 표시합니다. 직렬화할 수 없는 개체를 클립보드 메서드에 전달하면 예외를 throw하지 않고 메서드가 실패합니다. Serialization에 대 한 자세한 내용은 참조 하세요. System.Runtime.Serialization합니다.
단일 일반 형식으로 클립보드에 데이터를 추가하려면 다음을 수행합니다.
SetAudio, SetFileDropList, SetImage 또는 SetText 메서드를 사용합니다.
// 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
사용자 지정 형식으로 클립보드에 데이터를 추가하려면 다음을 수행합니다.
사용자 지정 형식 이름으로 SetData 메서드를 사용합니다.
또한 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
여러 형식으로 클립보드에 데이터를 추가하려면 다음을 수행합니다.
Clipboard.SetDataObject 메서드를 사용하고 데이터가 포함된 DataObject를 전달합니다.
// 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
참고 항목
.NET Desktop feedback