Laden...

Multilevel-Undo/-Redo mit dem Command-Muster

Erstellt von herbivore vor 17 Jahren Letzter Beitrag vor 15 Jahren 10.662 Views
herbivore Themenstarter:in
49.485 Beiträge seit 2005
vor 17 Jahren
Multilevel-Undo/-Redo mit dem Command-Muster

Hallo Community,

moderne Anwendungen kommen heutzutage kaum noch ohne ein Multilevel-Undo/-Redo aus. Um dies in einer eigenen Anwendung zu realisieren, bietet sich das Command-Entwurfsmuster an. Nur hat man von Muster alleine noch nicht. Letztendlich braucht man Code. Und genau um diesen geht es in diesem Beitrag.

Ich habe das Command-Pattern aus dem GoF-Buch erweitert und in die Klassen Command/MacroCommand und CommmandList gegossen. Um die Ausführung der Commands standesgerecht anstoßen zu können, gibt es die Klassen CommandButton und CommandMenuItem.

Und damit das ganze keine Theorie bleibt, gibt es drei Beispiele für konkrete Command-Klassen (Add, Insert und Remove für eine ListBox) und ein fertiges Beispiel-Programm, das die Verwendung zeigt und mit dem man alles ausprobieren kann.

Also Krönung gibt es eine - wie ich denke - mehr als brauchbare Dokumentation. Deshalb mache ich es an dieser Stelle auch kurz: Ich habe einfach die Übersichtsbeschreibung der Command- und CommandList-Klasse als Auszug aus der Doku angehängt. In der Zip-Datei findet ihr den kompletten Sourcecode (der Einfachheit halber als eine große CS-Datei) und die komplette Dokumentation als CHM-Datei.

Viel Spaß und Erfolg damit!

herbivore

PS: Fehler und Ungereimtheiten sind natürlich nicht ausgeschlossen. Für entsprechende Hinweise bin ich dankbar.

PPS: ErfinderDesRades hat sich von meinen Klassen inspirieren lassen und bietet in Generische Klassen für Multilevel-Undo/-Redo seine Lösung an.

Schlagwörter: Undo, Redo, Command, Designpattern, Entwufsmuster, 1000 Worte


herbivore Themenstarter:in
49.485 Beiträge seit 2005
vor 17 Jahren

Übersicht Command-Klasse

herbivore Themenstarter:in
49.485 Beiträge seit 2005
vor 17 Jahren

Übersicht CommandList-Klasse

C
489 Beiträge seit 2007
vor 15 Jahren

Hallo

Ich wollte nur mal melden, dass ich mich sehr gefreut habe hier diesen Code und vor allem die gute Dokumentation zu finden. Dies hat mir wirklich sehr geholfen eine solche Funktion für mein Programm umzusetzen.

chrische