Laden...

ListBox - Werte speichern / laden

Erstellt von Rico913 vor 3 Jahren Letzter Beitrag vor 3 Jahren 1.019 Views
R
Rico913 Themenstarter:in
95 Beiträge seit 2020
vor 3 Jahren
ListBox - Werte speichern / laden

Hi,

ich habe eine ListBox mit verschiedenen Werten (z.B. TEM, SEM, XRD etc.), die der Nutzer befüllen kann und speichern oder laden kann.
Ich habe von anderen Optionen eine user.config angelegt (settings.settings), in die ich schreiben oder lesen möchte:

Zum Schreiben habe ich folgenden Code:


var newList = new ArrayList();
            foreach (object item in Lst_F2_Methoden_Setup.Items)
            {
                newList.Add(item);
            }

            Properties.Settings.Default.Methode_Setup = newList.ToString();
            Properties.Settings.Default.Save();

Was er mir in die user.config schreibt, sieht so aus:


<setting name="Methode_Setup" serializeAs="String">
                <value>System.Collections.ArrayList</value>
            </setting>

Ich wundere mich, warum meine Werte dort nicht auftauchen. Im Settings.Settings habe ich den Type von "Methode_Setup" auf string gesetzt.

Zum Laden hab ich diesen Code:


var LoadMethodSetup = Properties.Settings.Default.Methode_Setup;
Lst_F2_Methoden_Setup.Items.Add(LoadMethodSetup);

Es wird zwar "System.Collections.ArrayList" geladen, aber das ist leider nicht das Ergebnis, welches ich suche 😦

16.835 Beiträge seit 2008
vor 3 Jahren

Verwende List<T> statt ArrayList. ArrayList sollte, weil untypisiert, ohnehin (seit so ca. 12-13 Jahren) nicht mehr verwendet werden.

4.939 Beiträge seit 2008
vor 3 Jahren

Für das Abspeichern in den Settings gibt es extra die StringCollection, bei List<T> muß man selber Hand an legen, s. How to save a List<string> on Settings.Default?

PS: Außerdem sehe ich gerade, daß die Zuweisung bei dir falsch es. Es muß so lauten:


Properties.Settings.Default.Methode_Setup = newList;

(wenn du den Typ entsprechend geändert hast!)

Durch das ToString() hast du den Namen der Komponente abgespeichert 😉

R
Rico913 Themenstarter:in
95 Beiträge seit 2020
vor 3 Jahren

Vielen Dank mal wieder für die schnelle unkomplizierte Hilfe - mit List hat's geklappt.

Mein neuer Code:
Speichern:


 var newList = new List<String>();
            foreach (string item in Lst_F2_Methoden_Setup.Items)
            {
                newList.Add(item.ToString());
            }
            Properties.Settings.Default.Methode_Setup = newList;
            Properties.Settings.Default.Save();

Laden:


Lst_F2_Methoden_Setup.Items.Clear();
            if (Properties.Settings.Default.Methode_Setup != null)
            {
                var LoadList = new List<String>();
                LoadList = Properties.Settings.Default.Methode_Setup;
                List<string> LoadList2 = LoadList.Cast<string>().ToList();
                foreach (var item in LoadList2)
                {
                    Lst_F2_Methoden_Setup.Items.Add(item);
                }
            }

4.939 Beiträge seit 2008
vor 3 Jahren

Beim Laden sollte aber einfach folgendes ausreichen:


var list = Properties.Settings.Default.Methode_Setup;
Lst_F2_Methoden_Setup.DataSource = list;

(bzw. direkt die Zuweisung in einer Zeile ;- )