Benutzerdefiniertes Format für die Zwischenablage

Benutzerdefiniertes Format für die Zwischenablage

Falls ihr für eure Anwendung die Zwischenablage verwenden möchtet, bietet es sich bei komplexeren Datenmodellen an, eigene Formate zu verwenden.
Unter .NET ist dies sehr einfach umzusetzen.

1. Eigenes Format definieren

Zuerst erstellt ihr euch eine Klasse, die euer Format abbilden soll.
Wichtig ist dabei nur, dass ihr nicht das Attribute [Serializable] vergesst. Dies ist zwingend notwendig.
In meinen Fall nutze ich z.B. die folgende Klasse:
[Serializable]
class MyClipboardFormat
{
    public int Id { get; set; }
    public string Name { get; set; }
}

2. Kopieren

Das folgende Beispiel demonstriert, wie ihr nun euer benutzerdefiniertes Format in die Zwischenablage kopieren könnt.

// Format holen
DataFormats.Format format = DataFormats.GetFormat(typeof(MyClipboardFormat).FullName);

// Objekt erzeugen
MyClipboardFormat obj = new MyClipboardFormat();
obj.Id = 123;
obj.Name = "www.kaisnet.de Rockt!";

// OLE Objekt erzeugen
IDataObject dataObj = new DataObject();
dataObj.SetData(format.Name, false, obj);

// In die Zwischenablage kopieren
Clipboard.SetDataObject(dataObj, false);

3. Einfügen

Schlussendlich bleibt nur noch offen, die Zwischenablage wieder auszulesen.

// Format holen
DataFormats.Format format = DataFormats.GetFormat(typeof(MyClipboardFormat).FullName);

// Daten holen
IDataObject dataObj = Clipboard.GetDataObject();

// Überprüfen ob die Daten in der Zwischenablage unserem benutzerdefinierten Format entsprechen
if (dataObj.GetDataPresent(format.Name))
{
    // Benutzerobjekt auslesen
    MyClipboardFormat data = (MyClipboardFormat)dataObj.GetData(format.Name);

}

Ich hoffe, dieser kurze Artikel war dem einen oder anderen Hilfreich. Hiermit lassen sich sehr komplexe Datenmodelle über die Zwischenablage kopieren bzw. verschieben. Das kann durchaus nützlich sein, wenn die Anwendung viel mit Daten hantiert und vorgegebene Formate nicht wirklich sinnvoll wären.
Um einen Kommentar zu hinterlassen, ist eine Anmeldung erforderlich.