Laden...

Verwendung von collections in Anwendungseinstellungen (->Benutzereinstellungen)

Erstellt von Heinzi2.5 vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.459 Views
H
Heinzi2.5 Themenstarter:in
12 Beiträge seit 2014
vor 9 Jahren
Verwendung von collections in Anwendungseinstellungen (->Benutzereinstellungen)

Hallo zusammen,

ich bin bei der Erstellung eines Dateiverwaltungstools (WinForms in CS2010) mit folgendem Problem konfrontiert, das ich nicht gelöst bekomme. Sowohl die Dokumentation von VS wie auch die einschlägige Literatur führen nicht weiter, da stets nur einfache Datentypen behandelt werden.

Besagte Anwendung enthält in den beschreibbaren Benutzereinstellungen eine ja auch als mgl. Typ wählbare StringCollection, die Pfadangaben aufnimmt.

Sofern die IDE als aktuelle Sitzung geöffnet bleibt, kann ich die Anwendung beliebig oft starten, Pfade eingeben & wieder schliessen: Alle jemals vorgenommenen Pfadeingaben werden (auf den vorherigen entsprechenden ~Save()-Aufruf hin) später feinsäuberlich deserialisiert wieder in der vorgesehenen ListView ausgegeben, wie auch die einfachen Einstellungen per Checkbox oder String stets problemlos deserialisiert werden.

Anders hingegen bspw. bei Erstellung eines Release bzw. nachdem man eine neue IDE-Sitzung startet:

Alle auf Basis einfacher Typen (mit/mit ohne Default-Wert) vorgenommen Benutzereinstellungen werden korrekt reproduziert, aber für die besagte Coll. samt Inhalts kommt jedesmal beim Laden die null-Referenz Ausnahme. Leider habe ich bislang nirgends.einen Hinweis auf das Problem gefunden.

Was meint Ihr, das zu tun wäre?

Gruss Heinzi

4.942 Beiträge seit 2008
vor 9 Jahren

Hallo,

hast du denn einen Standardwert (leere Liste) für den StringCollection-Eintrag gesetzt?
Ansonsten erhältst du beim Lesen eben eine Null-Referenz, wenn noch keine Daten vorhanden sind.

Hier ein paar Tipps dazu: Adding Items to my.settings StringCollection (Titel ist zwar irreführend, aber der Inhalt beschäftigst sich mit der Umgehung der NulLReferenceException).

H
Heinzi2.5 Themenstarter:in
12 Beiträge seit 2014
vor 9 Jahren

Hallo,

& danke für die Rückmeldung. Das zu sagen hatte ich vergessen. Bin zwar noch immer etwas dingelich vom vielen Rumprobieren, gestern abend meine.aber, auch das Setzen von Default-Werten ausprobiert zu haben, ohne dass es dadurch funktioniert hätte. Will's aber nach der Maloche nochmal ausprobieren.

Greetz Heinzi

656 Beiträge seit 2008
vor 9 Jahren

Vielleicht noch als Info (ohne den Link gelesen zu haben):
Generierte Settings-Klassen sind üblicherweise zwar sealed, aber auch partial. Bei einem ähnlichen Fall initialisiere ich solche (auch Custom Listen) einfach über die OnSettingsLoaded Methode (die aus der ApplicationSettingsBase kommt) in einer eigenen, von mir definierten (erweiternden) partial Settings-Klasse.

H
Heinzi2.5 Themenstarter:in
12 Beiträge seit 2014
vor 9 Jahren

Hallo,

& besten Dank für den link. Der dort vorzufindende etwas drollig anmutende Tip, im Designer für die Coll. einen String als Default -Wert festzulegen - der aber nach dem Schliessen des Designers - Speichern - und nochmaligem Öffnen wieder gelöscht wird - Speichern, hat das Problem interessanterweise gelöst.

Seitdem wird die Coll. stets instanziiert, wie es sein muss.