HJST1979 Geschrieben 28. Juli 2010 Geschrieben 28. Juli 2010 Hallo ich Programmiere derzeit einen Designer wie ich an anderer Stelle schon geschrieben habe. Folgendes ist die Ausgangslage: Bei dem Designer hat der Endanwender die Möglichkeit sowohl Controls auf das Form zu ziehen als auch Controls wieder zu entfernen. Weiterhin besteht die Möglichkeit dass der Endanwender die Größe und Position verändert. Das möchte ich realisieren: Ich möchte, dass der Endanwender seine vorherigen Aktionen rückgängig machen kann. Beispiel 1: Der Endanwender zieht 2 Buttons auf das Form. Nun drückt er "rückgängig" und die Optik sollte wieder so sein wie vorher. Beispiel 2: Der Endanwender löscht ausversehen einen Button. Nun drückt er wieder "rückgängig" und die Optik sollte wieder so sein wie vorher. Hat jemand vielleicht eine Idee wie sich das verwirklichen lässt ? Für Hilfe bin ich jetzt schon dankbar Gruß Hans-Jörg P.S. VB.NET Code wäre super aber macht auch nichts wenn C# Code gepostet wird Zitieren
TDM Geschrieben 28. Juli 2010 Geschrieben 28. Juli 2010 Also fertige Klassen (von Microsoft) sind mir nicht bekannt, aber du kannst ja mal bei Codeproject schauen, ob dir sowas zusagt. Zitieren
lbm1305 Geschrieben 28. Juli 2010 Geschrieben 28. Juli 2010 (bearbeitet) Eventuell mit 2 Collections bzw. einer Collection und einem Stack. Eine Collection hält die Elemente, die angezeigt werden. Der Stack hält die Controls, die gelöscht wurden bzw. vorgemerkt sind. Bearbeitet 28. Juli 2010 von lbm1305 Zitieren
HJST1979 Geschrieben 29. Juli 2010 Autor Geschrieben 29. Juli 2010 Hallo habs jetzt mit ArrayList gelöst. Das heißt ich merke mir die letzte Aktion (Beispiel: Controll, "Add") und falls ich das Rückgängig machen will, blende ich einfach das Control aus. usw. usw. Gruß Hans-Jörg Zitieren
TDM Geschrieben 29. Juli 2010 Geschrieben 29. Juli 2010 Hallo habs jetzt mit ArrayList gelöst. Das heißt ich merke mir die letzte Aktion (Beispiel: Controll, "Add") und falls ich das Rückgängig machen will, blende ich einfach das Control aus. usw. usw. Gruß Hans-Jörg Solang es nur ums Erstellen und Löschen ist das sicher ok. Interessant wirds dann erst, wenn du weitere Zusatzinformationen brauchst; bspw. Control wird verschoben: Aktionsart (Enum/Aktion)ControlZusatzinfo (Vector) Daraus ergibt sich für mich sowas: IList<IDictionary<Action<Control, object>, IControlActionInfoWrapper>> DoneList; public interface IControlActionInfoWrapper { Control Control { get; } object Info { get; } } public class ControlActionInfoWrapper<T> : IControlActionInfoWrapper { #region IControlActionInfoWrapper Members public Control Control { get; set; } object IControlActionInfoWrapper.Info { get { return Info; } } #endregion public T Info { get; set; } } Nur mal so als Idee in den Raum geworfen. :floet: Zitieren
lilith2k3 Geschrieben 29. Juli 2010 Geschrieben 29. Juli 2010 Command pattern - Wikipedia, the free encyclopedia Multi-level undo If all user actions in a program are implemented as command objects, the program can keep a stack of the most recently executed commands. When the user wants to undo a command, the program simply pops the most recent command object and executes its undo() method. Zitieren
streffin Geschrieben 30. Juli 2010 Geschrieben 30. Juli 2010 Etwas aufwaendiger, aber vielseitig waere die Moeglichjkeit, die Controls dynamisch aus einer DB auszulesen. Dazu muesstest du die relevanten Daten der Controls, (breite,hoehe,x-pos,y-pos, name, parent usw) als felder einer tabelle anlegen. Der Vorteil davon ist, dass du beim loeschen eines Controls, nicht die row aus der Tabelle werfen musst, sondern du das ueber ein "aktiv-flag" machen kannst. Dadurch kannst du dann beliebig Zustaende wieder herstellen (no nen timestamp wanns geloescht wurde und von wem mit inn die tabelle schreiben) wenn jemand mist gebaut hat. Grus Sven Zitieren
lbm1305 Geschrieben 30. Juli 2010 Geschrieben 30. Juli 2010 Etwas aufwaendiger, aber vielseitig waere die Moeglichjkeit, die Controls dynamisch aus einer DB auszulesen. Dazu muesstest du die relevanten Daten der Controls, (breite,hoehe,x-pos,y-pos, name, parent usw) als felder einer tabelle anlegen. Grus Sven Moin, Und schon muss er eine Datenbank erstellen ?! So etwas würde ich vielleicht in Erwägung ziehen, wenn der Benutzer sein Kunstwerk abspeichern möchte. Aber selbst da würde ich eine XML-Datei vorziehen. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.