Ich würde gerne für mein Programm eine kleine Config sprich eine kleine ini Datei basteln.
Was die ini Datei mit dem Programm zusammen machen soll:
-das Programm soll beim Programmstart die ini Datei lesen.
-das Programm soll beim drücken eines Buttons die ini Datei neu schreiben…sprich alte werte werden übernommen, neue werte werden überschrieben…
In die ini Datei soll:
-größe des Fensters (windows forms)
-der Status der in einer combobox als „Start“ wert angeben ist
Ich habe sowas noch nie gemacht und frage mich wie dies Funktioniert.
Ich würde mich sehr über einen kleinen code bzw. einen kleinen Denk anstoß oder sonstiges freuen.
das funktioniert ja auch soweit, wenn ein die Datei nicht da ist wird die neugeschrieben…aber wenn sie da ist…also beim auslesen…da gibt es einen fehler…ich weiß nicht was daran falsch ist…
loadXml gibt es nicht…bei nur Load gibt er sofort einen Fehler…und bei ReadXml gibt er einen Fehler wenn er an der stelle angekommen ist…
was kann ich machen? ist das komplett falsch? oder kann ich das zum größten teil so benutzen? könnte mir einer helfen?
Größe ? Status ?
Wer soll auf die Größe gesetzt werden? Dein Form?
du kannst es setzen mit …
this.Size = new Size(500, 500);
und statt 500,500 eben deine Werte.
Allerdings brauchst du die als int Wert.
Entweder du trennst deinen string in der Mitte und castest dann die beiden strings zu int…
string newSize = „500|500“; //aus der Row
string newWidth = newSize.Substring(0,3);
string newHeight = newSize.Substring(4, 3);
this.Size = new Size(Convert.ToInt32(newWidth),Convert.ToInt32(newHeight));
oder du nimmst 2 Rows statt 1.
WindowSizeWidth and WindowSizeHeight.
Und dann castest du die beiden Werte. Du ersparst dir den Substring.
Tipp: für Suche nach einem Wert in SetttingTabelle
Du hast 2 Spalten Name und Value.
Naja okay. Kann man machen.
Du mußt aber um eine Eigenschaft zu suchen alle Rows durchgehen bis dein Parameter in der Spalte Name auftaucht.
Aber es muss gewährleistet sein das der Wert in der Spalte Name wirklich einmalig ist. Sonst höhrt deine Suche früher auf als gedacht.
Was du machen kannst um einmal die Tabelle zu lesen und dann schnell auf Eigenschaften drauf zu kommen kannst du das hier nehmen.
//das hier global deklarieren
private Dictionary settingListe = new Dictionary();
//das hier in eine Funktion packen oder direkt nach dem Lesen deiner //Tabelle ausführen
foreach (DataRow row in deineTabelle.Rows)
{
settingListe.Add(row[„Name“].ToString(), row[„Value“].ToString());
}
//und nun kannst du nach deinem Begriff suchen wo auch immer
string windowSizeWert = settingListe[„WindowSize“];
path = @„C:\settings.xml“;
is quatsch - du übergibst den string doch irgendwo.
Es ist doch eine Methode die irgendwo aufgerufen wird.
Und die gibt eine Datatable zurück.
Z.B steht irgendwo
DataTable dt = getSettingsTable(@„C:\settings.xml“);
Oder nicht?
Okay …
Und nun machst du 2 Funktionen
private Dictionary settingListe = new Dictionary();
private void SetSettingDictonary(DataTable dt)
{
//Mein Tipp
foreach (DataRow row in dt.Rows)
{
settingListe.Add(row[„SettingName“].ToString(), row[„SettingValue“].ToString());
}
}
private void SetSettings()
{
//hier das setzen aller Eigenschaften
string newSize = settingListe[„WindowSize“]
string newWidth = newSize.Substring(0,3);
string newHeight = newSize.Substring(4, 3);
this.Size = new Size(Convert.ToInt32(newWidth),Convert.ToInt32(newHeight));
//Status?
}
Und dort wo du das stehen hast …
DataTable dt = getSettingsTable(@„C:\settings.xml“);
Machst du jetzt noch …
SetSettingDictonary(DataTable dt); //Um die Werte vernüftig zu laden
SetSettings(); //Die Eigenschaften setzen
.NET Konfigurationsmodell
Für Konfigurationsdateien bietet das .NET-Framework ab Version 2.0 eine supereinfache Lösung. Mit Visual Studio (auch Express) ist das ganz easy. Die konfigurationsdateien sind im XML-Format. Du kannst die Größe dann direkt als Size-Objekt speichern, das ist aber nur einer der vielen Vorteile gegenüber selbstgebastelten Lösungen.
Siehe: http://www.mycsharp.de/wbb2/thread.php?threadid=6439
Un nochmal … falls du deine Variante durchziehen willst.
Alles was du stehen hast, stimmt doch soweit.
Das kannst du doch lassen.
Du hast die beiden Funktionen rein kopiert und die globale Variable (Dictionary) ???
und in deinem Load Event nach deinem Aufruf von LoadSetting hast du die beiden Aufrufe gemacht, richtig?
DataTable dt =
getSettingsTable(@„C:\settings.xml“);
… hier die beiden anderen Aufrufe.
was bringt er denn für einen Fehler?
Daraus solltest du schon den Fehler erkennen.