hi,
ich versuchte atm verzweifelt in der Anwendungskonfigurationsdatei einen Wert als Array zu speichern.
Ich konnte den Typ Array aber nirgends finden ... (Bei Durchsuchen unter System ist er auch nicht ...)
ArrayList habe ich zwar gefunden, aber wenn ich der ArrayList einen Wert zuweißen will, kann ich nur leere Objekte zuweißen, und keine strings ....
Bin hier echt am verzweifeln ...
Hta jemand ne Idee. Schonmal THX im voraus
mfg
Hallo leb0rtran,
Es gibt doch für sowas System.Collection.Spezialized.SpezializedStringCollection.
Gruß
Juy Juka
ok, mit dem gehts auch.
is halt n bissle blöd, immer umwandeln, nur zum speichern ...
warum gibtsn da kein normales Array?
Hallo,
die vom Designer generierte Klasse für die Settings ist ein partielle Klasse. D.h. sie kann erweitert werden. Somit ist es möglich alles was serialisierbar (XML oder binär) in den Anwendungskonfigurationseinstellungen zu speichern.
using System.Collections.Generic;
using System.Configuration;
namespace XXX.Properties
{
/// <summary>
/// Erweitert die vom Designer generierten Settings so dass
/// eine Liste gespeichert werden kann.
/// </summary>
partial class Settings
{
[UserScopedSetting()]
[SettingsSerializeAs(SettingsSerializeAs.Xml)]
[DefaultSettingValue("")]
public List<string> MyList
{
get { return this["MyList"] as List<string>; }
set { this["MyList"] = value; }
}
}
}
Auf diese Weise ist es auch möglich eigene Klasse zu speichern.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Also bei mir geht ein array, indem ich einfach bsp string[] als typ angebe! das geht aber nicht im settings designer (zumindest bei mir!). ich habe die settings datei mit notepad geöffnet das [] hinzugefügt und wieder gespeichert.
cSharp Projekte : https://github.com/jogibear9988
Hallo jogibear9988,
wenn du danach eine Einstellung im Designer änderst (oder reicht schon das Öffnen der Datei) ist deine Modifikation futsch.
Daher ziehe ich die Erweiterung der Klasse vor.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
ne, ist nicht futsch...
ich kann dann sogar den designer benutzen um werte in das array einzufügen!!
cSharp Projekte : https://github.com/jogibear9988
@gfoidl Danke für den Tipp mit neuer klasse hat mir auc geholfen, aber wie trage ich das in .config datei (xml) ein?
der nimmt das automatische nicht ein, deswegen muss ichw ohl manuell machen.
internal sealed partial class Settings {
[UserScopedSetting()]
[SettingsSerializeAs(SettingsSerializeAs.Xml)]
[DefaultSettingValue("")]
public Arraylist MyArrayList
{
get { return this["MyArrayList"] as Arraylist; }
set { this["MyArrayList"] = value; }
}
}
und bei App.config habe ihc folgendes selbst eingetragen
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="test1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<applicationSettings>
<test1.Properties.Settings>
<setting name="MyArrayList" serializeAs="System.Collections.ArrayList">
<value> </value>
</setting>
</test1.Properties.Settings>
</applicationSettings>
</configuration>
Ich habe mich ebenfalls lange Zeit mit diesem Thema beschäftigt. Nun habe ich eine mögliche Lösung dafür gefunden.
<setting name="Test" serializeAs="Xml">
<value>
<ArrayOfAnyType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<anyType xsi:type="xsd:string">erster Eintrag</anyType>
<anyType xsi:type="xsd:string">zweiter Eintrag</anyType>
</ArrayOfAnyType>
</value>
</setting>
In der arrayList befinden sich die Einträge "erster Eintrag", "zweiter Eintrag"
Fertig!
ArrayList gehört in die Mottenkiste und sollte wie alle untypisierten Collections aus System.Collections nicht mehr benutzt werden. Verwende stattdessen List<T> und alle anderen typisierten Collections aus System.Collections.Generic.
Nachtrag: Mag sein, dass ArrayList zur Mottenkiste gehört, in der Standardauswahl der möglichen Datentypen ist jedoch eine Auswahl von besseren Datentypen wie z.B. List<T> nicht möglich.
Wenn ausserdem die app.config editiert wird, und zurück zu den Einstellungen des Projekts gewechselt wird, werden die getätigten Einträge von Visual Studio automatisch zu den Standardeinstellungen hinzugefügt:
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute(@"<?xml version=""1.0"" encoding=""utf-16""?>
<ArrayOfAnyType xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">
<anyType xsi:type=""xsd:string"">eins</anyType>
<anyType xsi:type=""xsd:string"">zwei</anyType>
<anyType xsi:type=""xsd:string"">drei</anyType>
<anyType xsi:type=""xsd:string"">vier</anyType>
</ArrayOfAnyType>")]
public global::System.Collections.ArrayList Test {
get {
return ((global::System.Collections.ArrayList)(this["Test"]));
}
}
Hallo nfsragnar,
ArrayList hat den Nachteil, dass sie untypisiert ist. Darüber brauchen wir hier im generellen nicht diskutieren, denn das wurde im Forum schon zur Genüge behandelt.
Es ist schade dass der Designer hier wohl veraltet ist und keine generischen Collections anbietet/zulässt, aber das sollte kein Hindernis darstellen. Weiter oben hab ich gezeigt wie es typisiert mit einer List<string> möglich ist. Hier können auch Standardwerte angegeben werden. Siehe
partial class Settings
{
[ApplicationScopedSettingAttribute]
[SettingsSerializeAs(SettingsSerializeAs.Xml)]
[DefaultSettingValue(
"<?xml version=\"1.0\"?>"+
"<ArrayOfString xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">"+
"<string>erster Eintrag</string>"+
"<string>zweiter Eintrag</string>"+
"<string>dritter Eintrag</string>"+
"</ArrayOfString>")]
public List<string> MyList
{
get { return this["MyList"] as List<string>; }
}
}
Wenn ausserdem die app.config editiert wird, und zurück zu den Einstellungen des Projekts gewechselt wird, werden die getätigten Einträge von Visual Studio automatisch zu den Standardeinstellungen hinzugefügt:
Das ist zwar das einzige Argument das für ArrayList übrig bleibt, aber ein Grund für die Verwendung der ArrayList ist dennoch nicht. Beim typisierten List<T> hab ich sogar den zusätzlichen Vorteil, dass ich nur 1 Stelle bearbeiten muss und mir der Designer nicht in die Arbeit pfuscht.
Es bleibt also bei der allgemeinen Empfehlung die ArrayList in der Mottenkiste zu lassen.
Hallo arakhsh_j,
deine Frage hab ich gar nicht bemerkt, zu dem damaligen Zeitpunkt war ich "Winterschlaf".
aber wie trage ich das in .config datei (xml) ein?
Bei den User-Settings ist nichts einzutragen. Sobald Änderungen gegenüber den Standardwerten vorliegen schreibt es .net automatisch in die user.config. Diese kannst du dir ansehen wie der Aufbau ist und ggf. in die app.config eintragen, aber wie gesagt nötig ist es nicht.
Für die Application-Settings siehe oben. Alternativ zur Angabe eines XML-Strings können die Listeneinträge auch im Konstruktor der Settings-Klasse erstellt werden.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"