Viele Elemente leichter aufrufen?
-
Hallo, ich habe in meinen programm derzeit 3 Checkboxen.
Mit meiner SaveLoad funktion lade ich die sachen immer beim Programm start. Allerdings muss ich für jede Checkbox die funktion aufrufen.cb_BlWh.IsChecked = Convert.ToBoolean(ini.IniReadValue("Main", cb_BlWh.Name)); cb_Round.IsChecked = Convert.ToBoolean(ini.IniReadValue("Main", cb_Round.Name)); cb_Counter.IsChecked = Convert.ToBoolean(ini.IniReadValue("Main", cb_Counter.Name));
Sobald ich nun also mehr Checkboxen adden würde, würde dies so weiter gehen. Gleiche halt auch bei anderen Elementen.
Ist es möglich eine art liste zu erstellen z.bliste elemente{ cb_BlWh cb_Round cb_Counter usw }
und man könnte die sachen dann mit z.b mit elemente(1) aufrufen um dann z.b cb_Round anzusprechen?
Möchte dies nutzen um dann einfach mit einer For schleife die Elemente abzuarbeiten.
Gruß
-
Was hindert dich daran deine Checkboxen in eine List<Checkbox> zu stecken und mit einer foreach drüber zu iterieren?
List<Checkbox> list = new List<Checkbox>(); list.Add(...) ... foreach(Checkbox cb in list) { cb.IsChecked = Convert.ToBoolean(ini.IniReadValue("Main", cb.Name)); }
-
Das kannte ich gar nicht
Mist.
Nur habe ich ein anderes problem nun, was aber auch schon vorher war.. was ich gar nicht bemerkt habe...
Es wird immer nur die checkbox geladen die als erstes ausgeführt wird.., alle danach nicht mehr.
Weiß jemand wieso? TextBoxen z.B werden alle geladen.
-
Dann zeig mal deinen Speicher- und Ladecode.
-
public void IniWriteValue(string Section, string Key, string Value) { WritePrivateProfileString(Section, Key, Value, this.Path); } public string IniReadValue(string Section, string Key) { const int MAX_CHARS = 1023; StringBuilder result = new StringBuilder(MAX_CHARS); GetPrivateProfileString(Section, Key, "", result, MAX_CHARS, this.Path); return result.ToString(); }
Da.
-
#Push? :3
-
Du musst schon den Code zeigen, in dem Du die Checkboxen initialisierst.
Es wird immer nur die checkbox geladen die als erstes ausgeführt wird
Und bitte eine genauere Fehlerbeschreibung. Was meinst du mit "geladen"? Was meinst Du mit "ausgeführt"?
-
Ja es werden halt die ganzen CheckBoxen gespeichert in eine .ini datei.
In der .ini steht auch dann überall name=true, bei denen die ich angeklickt habe. Schließe ich das programm, ist immer noch alles auf true. Öffne ich das Programm erneut und dann wird nur eine geladen und der rest in der .ini ist wieder bei name=false...
-
Schön und gut. Nur kann Dir niemand helfen, wenn Du keinen weiteren Code zeigst
-
http://www.codeproject.com/Articles/1966/An-INI-file-handling-class-using-C
Das ist meine ini methode.
Was möchtest du sonst noch wissen?Es muss ja am laden liegen, weil speichern funktioniert ohne probleme.
-
Dann zeig doch endlich mal den Code der Form*, indem Du die ganzen Checkboxen mit den Werten der Ini initialisierst. Irgendwo speicherst Du dort fälschlicherweise, da
Öffne ich das Programm erneut und dann wird nur eine geladen und der rest in der .ini ist wieder bei name=false...
Dateien ändern sich ja nicht von selbst.
*Kürz einfach alles raus was nichts damit zu tun hat und poste den Rest.
-
Die Checkboxen kriegen beim XML die Attribute:
Checked="checkedChanged" Unchecked="checkedChanged"
dazu die Methode:
private void checkedChanged(object sender, EventArgs e) { ini.IniWriteValue("Main", cb_BlWh.Name, Convert.ToString(cb_BlWh.IsChecked)); ini.IniWriteValue("Main", cb_Round.Name, Convert.ToString(cb_Round.IsChecked)); ini.IniWriteValue("Main", cb_Counter.Name, Convert.ToString(cb_Counter.IsChecked)); }
Und das laden steckt hier:
private void Window_Loaded(object sender, RoutedEventArgs e) { timer.Start(); textName1.Text = ini.IniReadValue("Main", "names1"); textName2.Text = ini.IniReadValue("Main", "names2"); cb_BlWh.IsChecked = Convert.ToBoolean(ini.IniReadValue("Main", cb_BlWh.Name)); cb_Round.IsChecked = Convert.ToBoolean(ini.IniReadValue("Main", cb_Round.Name)); cb_Counter.IsChecked = Convert.ToBoolean(ini.IniReadValue("Main", cb_Counter.Name)); }
-
Zu Beginn des Window_Loaded Events sind die Checkboxen unselektiert. In der Zeile cb_BlWh.IsChecked = Convert.ToBoolean(ini.IniReadValue("Main", cb_BlWh.Name));
feuert das Event checkedChanged und Du schreibst die aktuellen Werte in die Ini-Datei zurück. Für die restlichen Checkboxes ist das aber noch der Wert "unchecked".Abonniere die Events einfach nach der Initialisierung
oder
Speichere die Werte erst beim Beenden des Window in eine Datei und nicht bei jeder Änderung.
-
Abonniere die Events einfach nach der Initialisierung
Davon weiß ich nichts
Aber danke für die Antwort. Hat mir richtig gut geholfenDanke danke
-
LZx schrieb:
Abonniere die Events einfach nach der Initialisierung
Davon weiß ich nichts
Am Ende des Loaded-Events statt in XAML:
cb_BlWh.CheckedChanged += checkedChanged;Aber die andere Lösung ist sowieso besser. Am Ende der Form alle Daten speichern.
LZx schrieb:
Aber danke für die Antwort. Hat mir richtig gut geholfen
Danke danke
Mit Code gibt's i.d.R. recht zügig eine Antwort
-
Ok. Ja danke nochmal