Procedura: recuperare dati dagli Appunti
La classe Clipboard fornisce i metodi che consentono di interagire con la funzionalità Appunti del sistema operativo Windows. Molte applicazioni utilizzano gli Appunti come repository temporaneo per i dati. Negli elaboratori di testi, ad esempio, gli Appunti vengono utilizzati durante le operazioni di taglia e incolla. Gli Appunti sono anche utili per trasferire informazioni da un'applicazione a un'altra.
Alcune applicazioni memorizzano i dati negli Appunti in più formati per aumentare il numero delle altre applicazioni che possono utilizzare i dati. Un formato degli Appunti è costituito da una stringa che identifica il formato. Un'applicazione che utilizza tale formato può recuperare i dati associati contenuti negli Appunti. La classe DataFormats fornisce nomi di formato predefiniti che l'utente può impiegare. Sarà anche possibile utilizzare nomi di formato personalizzati o utilizzare un tipo di oggetto come formato. Per informazioni sull'aggiunta di dati agli Appunti a un progetto, vedere Procedura: aggiungere dati agli Appunti.
Per determinare se gli Appunti contengono dati in un determinato formato, utilizzare uno dei metodi ContainsFormato oppure il metodo GetData. Per recuperare dati dagli Appunti, utilizzare uno dei metodi GetFormato oppure il metodo GetData. Questi metodi sono nuovi in .NET Framework versione 2.0.
Per accedere ai dati dagli Appunti utilizzando versioni precedenti di .NET Framework 2.0, utilizzare il metodo GetDataObject e chiamare i metodi dell'interfaccia IDataObject restituita. Ad esempio, per determinare se un formato particolare è disponibile nell'oggetto restituito, chiamare il metodo GetDataPresent.
Nota
Tutte le applicazioni basate su Windows condividono gli Appunti. Di conseguenza, quando si passa a un'altra applicazione, è possibile che il contenuto degli Appunti venga modificato.
La classe Clipboard può essere utilizzata solo in thread impostati sulla modalità apartment a thread singolo (STA, Single-Threaded Apartment). Per utilizzare questa classe, assicurarsi che il metodo Main sia contrassegnato con l'attributo STAThreadAttribute.
Per recuperare dati dagli Appunti in un formato singolo comune
Utilizzare il metodo GetAudioStream, il metodo GetFileDropList, il metodo GetImage o il metodo GetText. È anche possibile utilizzare prima i metodi ContainsFormato corrispondenti per verificare se i dati sono disponibili in un determinato formato. Questi metodi sono disponibili solo in .NET Framework versione 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; }
Per recuperare dati dagli Appunti in un formato personalizzato
Utilizzare il metodo GetData con un nome di formato personalizzato. Questo metodo è disponibile solo in .NET Framework versione 2.0.
È anche possibile utilizzare nomi di formati predefiniti con il metodo SetData. Per ulteriori informazioni, vedere 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; } } }
Per recuperare dati dagli Appunti in più formati
Utilizzare il metodo GetDataObject. Questo metodo deve essere utilizzato per recuperare dati dagli Appunti nelle versioni precedenti a .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; } } }
Vedere anche
Attività
Procedura: aggiungere dati agli Appunti