Jak načíst data ze schránky
Třída Clipboard poskytuje metody, které můžete použít k interakci s funkcí Schránka operačního systému Windows. Mnoho aplikací používá schránku jako dočasné úložiště dat. Například textové procesory používají schránku během operací vystřižení a vložení. Schránka je užitečná také pro přenos informací od jedné aplikace k druhé.
Některé aplikace ukládají data do schránky ve více formátech, aby se zvýšil počet dalších aplikací, které by data potenciálně mohly používat. Formát schránky je řetězec, který identifikuje formát. Aplikace, která používá identifikovaný formát, může načíst přidružená data ve Schránce. Třída DataFormats poskytuje předdefinované názvy formátů pro vaše použití. Můžete také použít vlastní názvy formátů nebo jako jeho formát použít typ objektu. Informace o přidávání dat do schránky naleznete v tématu Postupy: Přidání dat do schránky.
Chcete-li zjistit, zda Clipboard obsahuje data v určitém formátu, použijte jednu z metod Contains
Format nebo metodu GetData. Pokud chcete načíst data ze schránky, použijte jednu z metod Get
Format nebo metodu GetData. Tyto metody jsou v rozhraní .NET Framework 2.0 nové.
Pokud chcete získat přístup k datům ze schránky pomocí verzí starších než .NET Framework 2.0, použijte metodu Clipboard.GetDataObject a volejte metody objektu IDataObject, který je vrácen. Chcete-li zjistit, zda je určitý formát k dispozici ve vráceném objektu, například zavolejte metodu GetDataPresent.
Poznámka
Všechny aplikace založené na Systému Windows sdílejí systémovou schránku. Obsah se proto může změnit, když přepnete do jiné aplikace.
Třída Clipboard lze použít pouze ve vláknech nastavených na režim jednovláknového apartmentu (STA). Chcete-li použít tuto třídu, ujistěte se, že je vaše metoda Main
označena atributem STAThreadAttribute.
Chcete-li načíst data ze schránky v jednom společném formátu
Použijte metodu GetAudioStream, GetFileDropList, GetImagenebo GetText. Volitelně můžete nejprve použít odpovídající metody
Contains
Format určit, zda jsou data k dispozici v určitém formátu. Tyto metody jsou k dispozici pouze v rozhraní .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
Jak načíst data ze schránky ve vlastním formátu
Použijte metodu GetData s vlastním názvem formátu. Tato metoda je k dispozici pouze v rozhraní .NET Framework 2.0.
Pomocí metody SetData můžete také použít předdefinované názvy formátů. Další informace najdete v tématu 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
Načtení dat ze schránky ve více formátech
Použijte metodu GetDataObject. Tuto metodu je nutné použít k načtení dat ze schránky ve verzích .NET Framework starších než 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
Viz také
.NET Desktop feedback