이 클래스는 Clipboard Windows 운영 체제 클립보드 기능과 상호 작용하는 메서드를 제공합니다. 많은 애플리케이션이 클립보드를 데이터의 임시 리포지토리로 사용합니다. 예를 들어, 워드 프로세서는 클립보드를 잘라낸 후 붙여넣기 작업 중 사용합니다. 또한 클립보드는 한 애플리케이션에서 다른 애플리케이션으로 데이터를 전송합니다.
클립보드에 데이터를 추가할 때 다른 애플리케이션이 해당 형식을 사용할 수 있는 경우 데이터를 인식할 수 있도록 데이터 형식을 지정합니다. 데이터를 사용할 수 있는 다른 애플리케이션의 수를 늘리려면 여러 가지 형식으로 클립보드에 데이터를 추가합니다.
클립보드 형식은 해당 형식을 사용하는 애플리케이션이 연결된 데이터를 검색할 수 있도록 형식을 식별하는 문자열입니다. DataFormats 클래스는 사용자의 사용에 맞게 미리 정의된 형식 이름을 제공합니다. 고유한 형식 이름을 사용하거나 개체의 형식을 해당 형식으로 사용할 수도 있습니다.
비고
모든 Windows 기반 애플리케이션은 클립보드를 공유합니다. 따라서, 다른 애플리케이션으로 전환할 때 내용은 변경될 수 있습니다.
Clipboard 클래스는 STA(단일 스레드 아파트) 모드로 설정된 스레드에서만 사용될 수 있습니다. 이 클래스를 사용하려면 Main 메서드가 STAThreadAttribute 특성으로 표시되었는지 확인하세요.
하나 이상의 형식으로 클립보드에 데이터를 추가하려면 SetDataObject 메서드를 사용합니다. 개체를 이 메서드에 전달합니다. 여러 형식의 데이터를 추가하려면 먼저 여러 형식으로 작동하도록 설계된 별도의 개체에 데이터를 추가합니다. 보통은 데이터를 DataObject에 추가하지만, IDataObject 인터페이스를 구현하는 모든 종류를 사용할 수 있습니다.
하나의 공통된 형식으로 클립보드에 데이터를 추가하려면 텍스트에 대한 SetText와 같은 해당 형식에 대한 특정 메서드를 사용합니다.
중요합니다
사용자 지정 개체를 클립보드에 배치하려면 JSON으로 직렬화할 수 있어야 합니다. JSON serialization을 자동으로 처리하는 새 형식 안전 메서드 SetDataAsJson 를 사용합니다. 레거시 SetData() 메서드는 제거 BinaryFormatter로 인해 .NET 9로 시작하는 사용자 지정 개체에서 더 이상 작동하지 않습니다.
단일 형식으로 데이터 추가
GetAudioStream, GetFileDropList, GetImage 또는 GetText 메서드를 사용합니다.
// Demonstrates SetAudio, ContainsAudio, and GetAudioStream.
public Stream SwapClipboardAudio(Stream replacementAudioStream)
{
Stream? returnAudioStream = null;
if (Clipboard.ContainsAudio())
{
returnAudioStream = Clipboard.GetAudioStream();
Clipboard.SetAudio(replacementAudioStream);
}
return returnAudioStream;
}
// Demonstrates SetFileDropList, ContainsFileDroList, and GetFileDropList
public StringCollection SwapClipboardFileDropList(StringCollection replacementList)
{
StringCollection? returnList = null;
if (Clipboard.ContainsFileDropList())
{
returnList = Clipboard.GetFileDropList();
Clipboard.SetFileDropList(replacementList);
}
return returnList;
}
// Demonstrates SetImage, ContainsImage, and GetImage.
public Image SwapClipboardImage(Image replacementImage)
{
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 Stream) As Stream
Dim returnAudioStream As 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 StringCollection) As StringCollection
Dim returnList As 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 Image) As Image
Dim returnImage As 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
사용자 지정 형식으로 데이터 추가
Clipboard.SetDataAsJson<T>(String, T) 메서드를 사용자 지정 형식 이름과 개체와 함께 사용합니다.
이 메서드는 SetDataAsJson<T>()를 사용하여 System.Text.Json 사용자 지정 개체를 자동으로 직렬화합니다. 이는 레거시 SetData() 메서드에 비해 형식 안전성 및 보안 이점을 제공하므로 클립보드에 사용자 지정 형식을 저장하기 위해 .NET 10 이상에서 권장되는 방법입니다.
중요합니다
레거시 SetData 메서드는 .NET 9 이상에서 제거로 인해 BinaryFormatter사용자 지정 개체에서 더 이상 작동하지 않습니다. 사용자 지정 형식에 대신 사용합니다 SetDataAsJson<T>() .
// Demonstrates SetDataAsJson, ContainsData, and GetData
// using a custom format name and a business object.
public Customer TestCustomFormat
{
get
{
Clipboard.SetDataAsJson("CustomerFormat", new Customer("Customer Name"));
if (Clipboard.ContainsData("CustomerFormat"))
{
if (Clipboard.TryGetData("CustomerFormat", out Customer customerData))
return customerData;
}
return null;
}
}
' Demonstrates SetData, ContainsData, and GetData
' using a custom format name and a business object.
Public ReadOnly Property TestCustomFormat() As Customer
Get
Clipboard.SetDataAsJson("CustomerFormat", New Customer("Customer Name"))
If Clipboard.ContainsData("CustomerFormat") Then
Dim customerData As Customer = Nothing
If Clipboard.TryGetData("CustomerFormat", customerData) Then
Return customerData
End If
End If
Return Nothing
End Get
End Property
Customer 이전 코드 조각에 사용된 클래스:
// Customer class used in custom clipboard format examples.
public class Customer
{
public string Name { get; set; }
public Customer(string name)
{
Name = name;
}
}
'Customer class used in custom clipboard format examples.
Public Class Customer
Public Property Name As String
Public Sub New(ByVal name As String)
Me.Name = name
End Sub
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();
Customer customer = new("Customer #2112");
ListViewItem listViewItem = new($"Customer as ListViewItem {customer.Name}");
// Add a Customer object using the type as the format.
data.SetDataAsJson(customer);
// Add a ListViewItem object using a custom format name.
data.SetDataAsJson("ListViewItemFormat", listViewItem.Text);
Clipboard.SetDataObject(data);
// Retrieve the data from the Clipboard.
DataObject retrievedData = (DataObject)Clipboard.GetDataObject()!;
if (retrievedData.GetDataPresent("ListViewItemFormat"))
{
if (retrievedData.TryGetData("ListViewItemFormat", out String item))
{
ListViewItem recreatedListViewItem = new(item);
MessageBox.Show($"Data contains ListViewItem with text of {recreatedListViewItem.Text}");
}
}
if (retrievedData.GetDataPresent(typeof(Customer)))
{
if (retrievedData.TryGetData(out Customer newCustomer))
{
MessageBox.Show($"Data contains Customer with name of {newCustomer.Name}");
}
}
}
' Demonstrates how to use a DataObject to add
' data to the Clipboard in multiple formats.
Public Sub TestClipboardMultipleFormats()
Dim data As New DataObject()
Dim customer As New Customer("Customer #2112")
Dim listViewItem As New ListViewItem($"Customer as ListViewItem {customer.Name}")
' Add a Customer object using the type as the format.
data.SetDataAsJson(customer)
' Add a ListViewItem object using a custom format name.
data.SetDataAsJson("ListViewItemFormat", listViewItem.Text)
Clipboard.SetDataObject(data)
' Retrieve the data from the Clipboard.
Dim retrievedData As DataObject = CType(Clipboard.GetDataObject(), DataObject)
If retrievedData.GetDataPresent("ListViewItemFormat") Then
Dim item As String = Nothing
If retrievedData.TryGetData("ListViewItemFormat", item) Then
Dim recreatedListViewItem As New ListViewItem(item)
MessageBox.Show($"Data contains ListViewItem with text of {recreatedListViewItem.Text}")
End If
End If
If retrievedData.GetDataPresent(GetType(Customer)) Then
Dim newCustomer As Customer = Nothing
If retrievedData.TryGetData(newCustomer) Then
MessageBox.Show($"Data contains Customer with name of {newCustomer.Name}")
End If
End If
End Sub
Customer 이전 코드 조각에 사용된 클래스:
// Customer class used in custom clipboard format examples.
public class Customer
{
public string Name { get; set; }
public Customer(string name)
{
Name = name;
}
}
'Customer class used in custom clipboard format examples.
Public Class Customer
Public Property Name As String
Public Sub New(ByVal name As String)
Me.Name = name
End Sub
End Class
참고하십시오
.NET Desktop feedback