Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Das Gurke

Community-Fossil

  • »Das Gurke« ist der Autor dieses Themas

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

1

04.09.2009, 09:45

[C# / .Net 2.0] Undo / Redo

Ich bin gerade dabei nach einer geeigneten Technik / Entwurfsmuster für Undo bzw. Redo Mechanismen zu suchen. Vor etwa 15 Minuten dachte ich noch ich könnte schon über ein oder zwei themenrelevante Beiträge glücklich sein, mittlerweile ertrinke ich darin ...

Natürlich werde ich mich durch die Treffer nochmal durchwühlen, aber vielleicht kann mir jemand hier helfen das Ganze abzukürzen:

- Hat hier schonmal jemand so einen Mechanismus mit C# / .Net 2.0 implementiert?
- Wenn ja, nach welchem Prinzip?
- Möglicherweise mithilfe einer existierenden Library (oder sogar dem .Net 2.0 Framework ... Ich überseh da laufend was)?

Gerade bei einem so grundlegenden Mechanismus will ich nur ungerne nach einigen Wochen merken, dass die von mir gewählte Implementierung doch nicht so ganz das Wahre ist, deswegen frage ich hier.

Falls es wichtig sein sollte nochmal die Rahmenbedingungen:
- Es geht um einen Editor, es werden also nicht gleich dutzende mögliche Undos / Redos per Frame anfallen.
- Ich muss das Verhalten einigen meiner CustomControls beibringen, es geht nicht um die "Standard" Windows.Forms Controls.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

04.09.2009, 11:59

Also der Standardweg führt über den Command Pattern wobei jeder Command neben der Execute() noch eine Art Unexecute() Methode zur Verfügung stellt. Wenn irgendwas passieren soll erzeugst du ein entsprechendes Command Objekt das über einen Aufruf von Command.Execute() die entsprechende Aktion ausführt und legst das Objekt dann auf einen Stack. Bei einem Undo rufst du einfach UndoStack.Top.Unexecute() auf und popst den obersten Command vom Stack (und legst ihn dabei evtl. auf einen RedoStack über den du analog das Redo machen kannst indem du dort wieder Execute() aufrufst und auf den UndoStack rüberpopst).

Das Gurke

Community-Fossil

  • »Das Gurke« ist der Autor dieses Themas

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

3

04.09.2009, 12:06

Ah, über das Pattern bin ich auch schon gestolpert. Schien mir auch ganz sinnvoll, aber ich war dann von den vielen Anwendungsgebieten in der Wikipedia etwas verwirrt.

Dann werde ich mal schauen, an welchen Stellen ich überall Commands implementieren muss.

4

04.09.2009, 14:02

Hallo

Hier ein guter Artikel:

http://www.mycsharp.de/wbb2/thread.php?threadid=21273

chrische

Werbeanzeige