ich habe ein Problem, was ich nicht schaffe zu lösen. Ich habe in einer extra DLL ein Form erstellt, welches mir die Optionen im Programm anzeigen soll die man dann verändern kann.
Dazu binde ich an das Control jeweils die entsprechenden Einstellungen
txtBackupPfad.DataBindings.Add("Text", setVars, "BackupPfad", false, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged);
Das Form mit dein einzelnen EInstellungen füge ich dann mit
Panels.Add(new cOptGeneral());
dem Optionsform hinzu und erstelle dabei jeweils einen Menüeintrag für jedes neue Panel.
Jetzt kann ich die Werte ändern und wenn ich das Form verlasse sind die Werte auch in der Variable gesetzt. Jetzt wollte ich aber auch ein "Cancel" einbauen und dachte. wenn ich DataSourceUpdateMode auf Never setzte, kann ich über ReadValue bzw. WriteValue bestimmen ob die Variable gesetzt wird oder nicht.
Leider aber bleibt beim Updatemode "Never" alles leer bzw.ich bekomme es nichthin das der Wert im Steuerelement nicht gleich automatisch auf dem Wert der Datenbindung übertragen wird.
Ich habe schon mit "OnValidation", "OnPropertyChanged" und "Never" einiges probiert...
Anbei noch mal Code zum Verständis:
Im Hauptprogramm
1. frmOptions.cs
Zeigt die Einstellungen an. Hier werden nur die einzelnen Einstellungsübersichten hinzugefügt.
Panels.Add(new cOptGeneral());
Panels.Add(new cOptFolder());
2. cOptFolder
Für jede Einstellungsgruppe gibt es ein Control
txtBackupPfad.DataBindings.Add("Text", setVars, "BackupPfad", false, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged);
txtHistoryPfad.DataBindings.Add("Text", setVars, "HistoryPfad", false, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged);
3. Eine extra DLL übernimmt die Anzeige und Aktualisierung. Hier wollte ich dann bei Canzel die Werte zurücksetzen
private void ReloadValues(Control ctrl)
{
for (int i = 0; i < ctrl.Controls.Count; i++)
{
Control ctrl2 = ctrl.Controls[i];
for (int l = 0; l < ctrl2.DataBindings.Count; l++)
{
Binding bind = ctrl2.DataBindings[l];
bind.ReadValue();
}
ReloadValues(ctrl2);
}
}
Oder sollte man das ganz anders machen? Aber eine andere tolle Idee habe ich dafür noch nicht gefunden.
Gruß
Frank