C# Userspezifische Speichern

TresPuntos

Cadet 4th Year
Registriert
Juni 2018
Beiträge
113
Hallo,

ist es möglich neben "normalen" userspezifischen Speicherungen (Textboxen etc) auch Listen und deren Auswahl zu speichern?
Die Speicherung von Textboxen etc. habe ich nämlich umgesetzt, aber zu den Listen habe ich nichts gefunden
 
Was du suchst ist Serialisierung.
Dabei wird ein Objekt so wie es momentan ist komplett gespeichert. Viele Klassen sind serialisierbar. Wenn du das selber implementieren willst musst du halt alle Attribute sichern die dir wichtig sind und später wieder zurückschreiben, aber in C# gibt es dafür serializer und deserializer.
 
In so einem Fall kommt der Inhalt für die Liste i.d.R. ja aus einer festen Quelle. API-Abfrage bspw. oder einer Datenbank mit den Einträgen. Und die aktuelle Auswahl des Benutzers wird gespeichert. Und zwar dort, wo Du auch die Inhalte der Textboxen speicherst.

Ruft der Benutzer später das Formular erneut auf, wird die Liste erneut mit allen Werten gefüllt und das zuvor selektierte und gespeicherte Element geladen und in der Liste gesetzt.

Das hat mit Serialisierung von Objekten erstmal nichts zu tun. Es ist nur eine Form, Daten zu speichern. Aber eine unübliche für Formulare dieser Art, denn niemand würde auf die Idee kommen ein Control in seinem aktuellen Zustand zu serialisieren. Benutzerdaten könnten serialisiert werden, aber das löst ja nicht direkt sein Problem, wie er mit Listen und selektierten Einträgen umgehen soll.
 
Ich habe das jetzt so gelöst, dass die Indexwerte gespeichert werden und beim Laden wieder selektiert werden. Ist bei mir möglich weil meine Liste durch eine Methode gefüllt werden und ich dass mit Laden wieder starten kann.

Danke noch mal für die Hilfe :)
 
Mit Indexwerte meinst Du 0,1,2? Ich wäre damit vorsichtig. Ändert sich mal die Reihenfolge der Liste, bspw. durch eine andere Sortierung, oder fält ein Element raus, wird später das falsche Element selektiert. Ich würde immer einen eindeutigen Identifizierer des jeweiligen Elements speichern.

Ansonsten: gute Lösung, gern geschehen :)
 
  • Gefällt mir
Reaktionen: Renegade334
Ja ist mir später aufgefallen, sodass ich den String gespeichert habe, aber trotzdem Danke für den Hinweis :)

C#:
        private void Tool1_FormClosing(object sender, FormClosingEventArgs e)
        {
            Properties.Settings.Default.Auswahl = lstBeispiel.SelectedItem.ToString();
            Properties.Settings.Default.Save();
        }

        private void XMLVergleichstool_Load(object sender, EventArgs e)
        {
            for (int i = lstOrdner.Items.Count - 1; i >= 0; i--)
                {
                    if (Properties.Settings.Default.Auswahl == lstBeispiel.Items[i].ToString())
                    {
                        lstBeispiel.SetSelected(i, true);
                    }
                }
                
            }
 
Zurück
Oben