Veröffentlicht 28. Juli 201015 j 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
28. Juli 201015 j Also fertige Klassen (von Microsoft) sind mir nicht bekannt, aber du kannst ja mal bei Codeproject schauen, ob dir sowas zusagt.
28. Juli 201015 j 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 201015 j von lbm1305
29. Juli 201015 j Autor 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
29. Juli 201015 j 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:
29. Juli 201015 j 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.
30. Juli 201015 j 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
30. Juli 201015 j 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.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.