none
Strategien zur Prüfung des Speichervorgangs RRS feed

  • Allgemeine Diskussion

  • Hallo zusammen,

    ich versuche gerade eine Möglichkeit zu finden, zu prüfen, ob z.B. ein Button "Speichern" gedrückt wurde.

    Hierzu ein kleines Beispiel: eine kleine Applikation besteht nur aus zwei UserControls: Seite1 und Seite2. (Es könnten unendlich viele mehr sein, aber der Einfachheit halber sind es hier nur zwei.)

    Beide Controls sind gleich aufgebaut: eine Textbox und ein Button, der die Bezeichnung "speichern" trägt.

    Zum Applikationsstart befindet sich der User auf Seite1. Er tippt etwas in die Textbox ein, dabei wird das "textChanged" Event ausgelösst. Dieses aktiviert (enable) den Speichern-Button, jedoch ohne ihn auszulösen.  

    Im Idealfall klickt der User jetzt auf den Button, wodurch ein Speichervorgang ausgeführt wird (also im OnClick Event) und deaktiviert sich danach selbst wieder. Im Anschluss klickt der User z.B. ins Menü und wählt Seite2 aus.

    Aber was ist, wenn der User vergessen hat, den Button "Speichern" zu drücken? In diesem Fall wären alle Änderungen verloren.
    Genau das will ich aber vermeiden.

    Wie also schaffe ich es, beim Wechsel auf eine andere Seite (oder auf ein anderes TabItem oder oder oder...) zu prüfen, ob der Speicher-Button gedrückt wurde?

    Welche Strategie würdet Ihr empfehlen?

    Danke und LG

    Mittwoch, 21. März 2012 12:46

Alle Antworten

  • Hallo,

    am einfachsten wäre es doch einfach eine boolsche Variable zu definieren, in der du speicherst ob der Button geklickt wurde. Diese Variable wäre dann zu Beginn mit false initialisiert und wenn der Button gedrückt wird auf true gesetzt. Wenn der User dann auf Seite 2 klickt kannst du einfach überprüfen ob diese Variable true ist:

    bool buttonClicked;
    public MainWindow()
    {
        InitializeComponent();
        buttonClicked = false;
    }
    
    private void speichernButton_Click(object sender, RoutedEventArgs e)
    {
        buttonClicked = true;
    }
    
    private void goToPage2()
    {
        if (buttonClicked)
        {
            //GOTO Page 2
        }
        else
        {
            MessageBox.Show("Button wurde nicht geklickt!");
        }
    
    }


    Viele Grüße,
    Thomas Fröhle
    MSDN Hotline für MSDN Online Deutschland


    Disclaimer:
    Bitte haben Sie Verständnis dafür, dass wir hier auf Rückfragen gar nicht oder nur sehr zeitverzögert antworten können.
    Bitte nutzen Sie für Rückfragen oder neue Fragen den telefonischen Weg über die MSDN Hotline: http://www.msdn-online.de/Hotline
    MSDN Hotline: Schnelle & kompetente Hilfe für Entwickler: kostenfrei!

    Es gelten für die MSDN Hotline und dieses Posting diese Nutzungsbedingungen, Hinweise
    zu
    MarkenzeichenInformationen zur Datensicherheit sowie die gesonderten Nutzungsbedingungen für die MSDN Hotline.


    Mittwoch, 21. März 2012 15:02
  • Danke - aber nein, so hab ich das sicher nicht gemeint :)

    Angenommen ich kann in meiner Applikation auf 1000 verschiedene "Seiten" springen, dann müsste ich ja auf jeder Seite jede Seite auf Ihren Button-Status prüfen.

    Davon ab, ist eine extra Variable nicht notwendig, da ich ja prüfen kann, ob der Button enabled ist (siehe meine Beschreibung :) ).

    Schade - ich such schon den ganzen Tag nach einer guten Lösung, aber bis jetzt hab ich nichts gefunden. Es muss doch einen konkreten Weg geben, wie man so etwas lösst *seufz*.

    LG

     

    Mittwoch, 21. März 2012 15:21
  • Hi,

    Angenommen ich kann in meiner Applikation auf 1000 verschiedene "Seiten" springen, dann müsste ich ja auf jeder Seite jede Seite auf Ihren Button-Status prüfen.

    Was aber, dank Vererbung, auch nicht so ein wahnsinns Act werden sollte.

    Davon ab, ist eine extra Variable nicht notwendig, da ich ja prüfen kann, ob der Button enabled ist (siehe meine Beschreibung :) ).

    Schade - ich such schon den ganzen Tag nach einer guten Lösung, aber bis jetzt hab ich nichts gefunden. Es muss doch einen konkreten Weg geben, wie man so etwas lösst *seufz*.

    LG

    Die Frage ist natürlich, warum du den Benutzer nicht weiterleistet wenn er den Speicher-Button gedrückt hat, also im Click event? Oder warum speicherst du nicht automatisch, wenn der Focus den Eingabebereich des Controls verlassen hat?

    Nur zwei Mögliche Lösungen... ;-)

    Viele Grüße
    Holger M. Rößler


    Kaum macht man es richtig, schon funktioniert es

    Mittwoch, 21. März 2012 16:03
  • Hi DerFrix,

    ich könnte mir noch vorstellen das du so was Ähnliches wie Word in Sinn hast wenn ich X- Dokumente geöffnet hatte und dann alle schließe, werde ich für die Dokument bei denen ich Änderungen gemacht habe gefragt ob ich die Änderung übernehmen möchte.

    Ich denke mal das wird im Close Event behandelt, was es ja auch entsprechend für Tabs (UserControls) usw gibt.

    Vielleicht beschreibst du einfach mal genau wie das Programm (User Control) mit den Eingaben umgehen soll.

    (Automatisch Speichern, Speichern nach Nachfrage, Nie Speicher usw.)

    MFG

    Björn

    Donnerstag, 22. März 2012 23:27
  • ****************************************************************************************************************
    Dieser Thread wurde mangels weiterer Beteiligung des Fragestellenden ohne bestätigte Lösung abgeschlossen.
    Neue Rückfragen oder Ergänzungen zu diesem Thread bleiben weiterhin möglich.
    ****************************************************************************************************************

    Robert Breitenhofer, MICROSOFT  Twitter Facebook
    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Freitag, 30. März 2012 08:48
    Moderator
  • Hallo

    WPF bietet u.a. DataBinding und Commands.
    Am besten Du bindest den TextBox.Text an eine String-Property eines Datenobjekts (=>DataContext)
    Im Setter der Property kannst Du dann auch "tracken" ob die Property "dirty" ist...sprich verändert wurde.
    Den Speicher-Button Befehl führst Du über einen Command aus (RoutedCommand oder RelayCommand)
    Wenn nichts "Dirty" ist, ist der Button disabled (ICommand.CanExecute)
    Beim Wechsel der Seite checkst Du das/die Dirty-Flag/s.
    Wenn eine Property Dirty ist, kommt eine Nachfrage ("Sie haben ungespeicherte Eingaben [Speichern] [Verwerfen]?")
    Im Grunde M-V-VM.

    Man kann's auch mit EventHandlern machen, und die Inhalte der Controls speichern.
    Dann macht man sich das hübsche Potential von WPF aber gar nicht zu Nutze, und muss vielerlei unnötigen Code-Behind schreiben, was doch schade ist.

    MfG,
    Christoph


    Sonntag, 1. April 2012 09:06