Copy und Paste von Objekten über die Zwischenablage von Windows in C#.
In C# lassen sich Objekte über die Zwischenablage mit Copy und Paste austauschen. Neben den Objektdaten lassen sich auch weitere Formate ablegen. So kann z.B. eine Stringrepräsentation des Objektes abgelegt werden, welche der Anwender in eine andere Anwendung einfügen kann.
Nehmen wir folgende Beispielklasse:
[Serializable] public class Person { public string Name { get; set; } public int Age { get; set; } public Person() { Name = ""; Age = -1; } }
Ein Objekt dieser Klasse soll über die Zwischenablage ausgetauscht werden. Wichtig ist, dass diese Klasse [Serializable]
ist.
Kopieren des Objekts in die Zwischenablage
Mittels einem DataObject
können wir nun eine Instanz in die Zwischenablage packen:
Clipboard.Clear(); DataObject dataObject = new DataObject(); dataObject.SetData(DataFormats.Text, string.Format("{0}, {1}", p.Name, p.Age.ToString())); dataObject.SetData("MyPerson", p); Clipboard.SetDataObject(dataObject);
Wir legen hier zwei Formate ab. Einmal das serialisierte Objekt, dazu noch im Textformat den Namen und das Alter. In der Zwischenablage sieht es dann so aus:
Wie wir sehen, wird hier unser eigenes Datenformat „MyPerson“ abgelegt. Auch der Text wird abgelegt:
Hier sehen wir auch ganz gut, wie die Zwischenablage von Windows funktioniert. Diverse Formate werden hier abgelegt und eine Anwendung kann sich beim Einfügen das Richtige heraussuchen.
Einfügen aus der Zwischenablage
Beim Einfügen bzw. Auslesen prüfen wir zuerst, ob in der Zwischenablage überhaupt unser eigenes Format bzw. Objekt vorhanden ist.
Person p = null; if (Clipboard.ContainsData("MyPerson")) { p = (Person)Clipboard.GetData("MyPerson"); }
Falls ja, können wir dieses direkt mit der GetData
-Methode auslesen.
Das wars, wie man sieht funktioniert dies recht einfach. Der Vorteil den Datenaustausch über die Zwischenablage zu realisieren erlaubt es, Objekte auch zwischen zwei Instanzen der Anwendung auszutauschen.