Suche Ideen: Rückgängig-Taste in Formviews



  • Ich habe eine SDI Anwendung mit vielen verschiedenen Formviews.
    Nun kam ein Kollege/Tester letzte Woche mit der bitte, dass er eine Rückgängig-Taste haben möchte.

    Er hatte gerade zig Sachen eingegen und dann aus Versehen einen langen Satz gelöscht.
    Nun gibt es die Möglichkeit, Abzubrechen und alle Änderungen zu verwerfen - das wollte er aber auch nicht, da er schon viel eingegeben hatte.

    Tja, ich fände die Funktion auch sinnvoll, aber mir fällt kein Lösungsansatz ein.

    Habt ihr Ideen? Was macht Sinn?
    Bei SetFocus und KillFocus den Zustand speichern? Den Zustand von was? Allem? (Uff)
    Wie viele Schritte rückgängig machen Sinn? Einer ist ja schon nett...



  • bezieht sich das 'undo' nur auf texteditierkrams?



  • Jein.
    Nur Edits wäre schon mal mehr als jetzt und vor allem das wo wirklich Arbeit (bis zu 500 Zeichen) verloren geht, wenn man ne falsche Taste drückt.

    Wenn es auch für andere Dialogelemente geht ist das dann Bonus. 😉
    Ne Checkbox wieder anklicken ist ja vom Aufwand her nicht zu vergleichen damit, einen Text den sich wohlmöglich noch der Kollege ausgedacht hatte wieder zusammenzureimen.



  • also im editierbereich ist es imho das einfachste eine, mmmhhh, vielleicht abstraktion einzuführen die eine benutzeraktion darstellt und eine einfache undo-klasse zu implementieren, die eine ummm vielleicht std::list hält. dieser liste hängst du die abstrakte aktion hinten ran sobald sie ausgeführt (z.b. delete-taste gedrückt) wird und hältst in der undo-klasse ggf. parameter wie sooben gelöschter text. beim eigentlichen undo holst du die letzte aktion von der liste wieder runter (ich merke gerade ein stack tuts genau so :P) und triffst die entprechende gegenmaßnahme. das ist jetzt natürlich noch sehr abstrakt gedacht und ich bin mir nicht sicher ob dir dass weiterhilt :S


  • Mod

    Für die prinzipiellen Techniken wie man das Undo/Redo in eine Klasse packt ist in "Design Pattern" (Gamma, Helm, ...) in Kapitel 2.7 ein klassischer Ansatz mit dem Command Pattern drin.

    Es seht Dir frei selber zu definieren was dann ein Schritt/Command ist.
    WM_KILLFOCUS sehe ich bei ener Formular basierten Anwendung als guten Ansatz.

    Andere Idee:
    Wäre es nicht evtl. einfacher eine Funktion einzubauen, dienur die Daten des aktuellen Feldes verwirft und die anderen belässt. Das wäre sicherlich einfach zu realisieren.
    Oder Du bietest eine Funktion an, die alle geänderten Daten in einem Dialog anzeigt (Checkbox-Liste) und wo der User auswählt welche Daten wiederhergestellt werden sollen.

    BTW: jedes Edit Control hat per rechter Mausklick und Ctr+Y Taste sein eigenes Undo!



  • Martin Richter schrieb:

    Für die prinzipiellen Techniken wie man das Undo/Redo in eine Klasse packt ist in "Design Pattern" (Gamma, Helm, ...) in Kapitel 2.7 ein klassischer Ansatz mit dem Command Pattern drin.

    Es seht Dir frei selber zu definieren was dann ein Schritt/Command ist.
    WM_KILLFOCUS sehe ich bei ener Formular basierten Anwendung als guten Ansatz.

    Hm schade, ich kenne das Buch leider nicht.
    Aber immerhin war meine Idee nicht völlig abwegig. 🙂

    Andere Idee:
    Wäre es nicht evtl. einfacher eine Funktion einzubauen, dienur die Daten des aktuellen Feldes verwirft und die anderen belässt. Das wäre sicherlich einfach zu realisieren.

    Das denke ich auch, trotzdem bleibt die Frage nach dem wie.

    Oder Du bietest eine Funktion an, die alle geänderten Daten in einem Dialog anzeigt (Checkbox-Liste) und wo der User auswählt welche Daten wiederhergestellt werden sollen.

    BTW: jedes Edit Control hat per rechter Mausklick und Ctr+Y Taste sein eigenes Undo!

    Jetzt echt Strg+Y? Ich dachte das sei Wiederherstellen. Na, dann kann der Kollege es lange mit Strg+Z versuchen, das hatten wir nämlich getestet.


Anmelden zum Antworten