Procedura: aggiungere dati agli 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 utili anche per trasferire i dati da un'applicazione a un'altra.
Quando si aggiungono dati agli Appunti, è possibile indicarne il formato in modo che i dati possano essere utilizzati da altre applicazioni che supportano tale formato. È anche possibile aggiungere dati agli Appunti in più formati diversi per aumentare il numero delle altre applicazioni che possono utilizzare i dati.
Un formato degli Appunti è costituito da una stringa che identifica il formato, in modo che un'applicazione che utilizza tale formato possa recuperare i dati associati. La classe DataFormats fornisce nomi di formato predefiniti che l'utente può impiegare. È anche possibile utilizzare nomi di formato personalizzati oppure utilizzare un tipo di oggetto come formato.
Per aggiungere dati agli Appunti in uno o più formati, utilizzare il metodo SetDataObject. A questo metodo è possibile passare un qualsiasi oggetto ma, per poter aggiungere dati in più formati, è necessario innanzitutto aggiungere i dati a un oggetto distinto appositamente progettato per gestire più formati. In genere, i dati verranno aggiunti alla classe DataObject, ma è possibile utilizzare qualsiasi tipo che implementi l'interfaccia IDataObject.
In .NET Framework versione 2.0 è possibile aggiungere dati direttamente agli Appunti utilizzando nuovi metodi progettati per semplificare le attività di base relative agli Appunti. Questi metodi devono essere utilizzati quando si gestiscono dati in un singolo formato comune, ad esempio testo.
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, verificare che il metodo Main sia contrassegnato con l'attributo STAThreadAttribute.
Per essere inserito negli Appunti, è necessario che un oggetto sia serializzabile. Per rendere un tipo serializzabile, contrassegnarlo con l'attributo SerializableAttribute. Se si passa un oggetto non serializzabile a un metodo degli Appunti, il metodo non riuscirà ma non verranno generate eccezioni. Per ulteriori informazioni sulla serializzazione, vedere System.Runtime.Serialization.
Per aggiungere dati agli Appunti in un singolo formato comune
Utilizzare il metodo SetAudio, il metodo SetFileDropList, il metodo SetImage o il metodo SetText. 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 aggiungere dati agli Appunti in un formato personalizzato
Utilizzare il metodo SetData 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 aggiungere dati agli Appunti in più formati
Utilizzare il metodo SetDataObject e passare una classe DataObject contenente i dati. Questo metodo deve essere utilizzato per aggiungere dati agli 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: recuperare dati dagli Appunti