none
Visual Studio 2017: Speichern und wiederherstellen aller Daten auf einem Panel? RRS feed

  • Frage

  • Hallo Forum, 

    Ich habe schon wieder ein Problem mit der Umsetzung...

    Auf einem Panel habe ich viele Controls (weitere Panels mit RadioButtons, Label und Textboxen) die während einer Sitzung nach und nach befüllt werden.

    Nun soll ich für einen evtl Anwendungscrash (Stromausfall etc) eine Funktion schreiben, die den aktuellen Stand der Controls speichert, sodass man das ganze auch wiederherstellen kann.

    Geht sowas überhaupt? Mein Ansatz wäre jetzt, alle Controls des Panels durchlaufen und die relevanten Eigenschaften (es geht hier nur um Text und Checked) in eine Datei zu schreiben.

    Gibt es dafür evtl was schöneres?

    LG und einen sonnigen Sonntag Micha 

    Sonntag, 21. Mai 2017 07:32

Antworten

  • Hallo

    Ich gehe mal von einer Windows-Forms-Anwendung aus.

    Geht sowas überhaupt? Mein Ansatz wäre jetzt, alle Controls des Panels durchlaufen und die relevanten Eigenschaften (es geht hier nur um Text und Checked) in eine Datei zu schreiben.

    Du kannst wie angedacht die "Controls"-Collection deines Forms (rekursiv) durchlaufen und alle Nutzdaten der gefundenen Controls auswerten und in z.B. einem Dictionary ablegen und dieses geeignet serialisieren. Das machst du über einen Timer, sagen wir alle 3 Minuten oder jedesmal, wenn sich etwas geändert hat. Beim normalen Programmende schreibst du einen "Merker", der dir beim nächsten Programmstart verrät, ob du die letzte Zwischensicherung laden musst oder deine Controls anderweitig initialisierst.

    Gibt es dafür evtl was schöneres?

    Was könnte schöner sein? Neben dem Ratschlag, WPF und damit eine Trennung der Schichten in View-Model- und ViewModel zu vollziehen (den Umstieg würde ich empfehlen, wenn du bis zu ein paar Monate Extrazeit hast :D), kannst du auch eine Trennung der "View"/Darstellung vom (Daten)Model nach z.B. dem MVP-Muster (Model-View-Presenter) vornehmen (was aber auch nicht von Heute auf Morgen, allerdings meistens schneller geht). Dies eignet sich auch für Forms-Anwendungen. Vielleicht einfach mal "googlen" (Stichworte: MVC, MVP, MVVM, WindowsForms). Hier würde man dann entsprechend die "Models" serialisieren.

    Dann gibt es auch noch "Zwischenstufen", z.B. könntest du eine (serialisierbare )Klasse schreiben, die in geeigneter Form die notwendigen Eigenschaften bereitstellt die du dann an die Eigenschaften deiner Controls bindest.

    Gruß

    • Als Antwort markiert MKnost Dienstag, 23. Mai 2017 13:46
    Sonntag, 21. Mai 2017 12:08

Alle Antworten

  • Hallo

    Ich gehe mal von einer Windows-Forms-Anwendung aus.

    Geht sowas überhaupt? Mein Ansatz wäre jetzt, alle Controls des Panels durchlaufen und die relevanten Eigenschaften (es geht hier nur um Text und Checked) in eine Datei zu schreiben.

    Du kannst wie angedacht die "Controls"-Collection deines Forms (rekursiv) durchlaufen und alle Nutzdaten der gefundenen Controls auswerten und in z.B. einem Dictionary ablegen und dieses geeignet serialisieren. Das machst du über einen Timer, sagen wir alle 3 Minuten oder jedesmal, wenn sich etwas geändert hat. Beim normalen Programmende schreibst du einen "Merker", der dir beim nächsten Programmstart verrät, ob du die letzte Zwischensicherung laden musst oder deine Controls anderweitig initialisierst.

    Gibt es dafür evtl was schöneres?

    Was könnte schöner sein? Neben dem Ratschlag, WPF und damit eine Trennung der Schichten in View-Model- und ViewModel zu vollziehen (den Umstieg würde ich empfehlen, wenn du bis zu ein paar Monate Extrazeit hast :D), kannst du auch eine Trennung der "View"/Darstellung vom (Daten)Model nach z.B. dem MVP-Muster (Model-View-Presenter) vornehmen (was aber auch nicht von Heute auf Morgen, allerdings meistens schneller geht). Dies eignet sich auch für Forms-Anwendungen. Vielleicht einfach mal "googlen" (Stichworte: MVC, MVP, MVVM, WindowsForms). Hier würde man dann entsprechend die "Models" serialisieren.

    Dann gibt es auch noch "Zwischenstufen", z.B. könntest du eine (serialisierbare )Klasse schreiben, die in geeigneter Form die notwendigen Eigenschaften bereitstellt die du dann an die Eigenschaften deiner Controls bindest.

    Gruß

    • Als Antwort markiert MKnost Dienstag, 23. Mai 2017 13:46
    Sonntag, 21. Mai 2017 12:08
  • Danke für die Tipps, ich habe die Variante mit dem Dictionary gewählt, das klappt super!
    Dienstag, 23. Mai 2017 13:46