Winforms ComboBox Selected Das Ändern von Elementen wirkt sich nicht auf die BindingSource aus

8

Ich mache C # / WinForms-Anwendung. Das Problem, das ich (noch) nicht lösen konnte, ist, dass wenn ich das SelectedItem von ComboBox programmatisch ändere, es geändert wird, bis die ComboBox den Fokus verliert, nachdem es seinen Wert vor dem Zuweisen des SelectedItem "erinnert". Ich denke, dass es den alten Wert von der verbindlichen Quelle nimmt. Bei der Auswahl eines Elements über die Benutzeroberfläche wird das zugrunde liegende gebundene Objekt normal aktualisiert, dies jedoch nicht, wenn ich SelectedItem programmatisch einen neuen Wert zuweise.

Nur für weitere Informationen: Ich versuche, "rückgängig machen" zu implementieren, was bedeutet, dass ich jede Änderung irgendwo speichern werde und wenn ich "Bearbeiten" eingebe, rückgängig mache ich alle diese Änderungen, die vom Benutzer vorgenommen werden. Interessant ist, dass die anderen Steuerelemente (TextBoxes, NumericUpDowns) funktionieren.

Hier sind die Details:

Ich habe eine ComboBox, die ich so an das ComboItem-Objekt binden kann:

%Vor%

wobei Combo und ComboList benutzerdefinierte Klassen zum Laden der Daten aus der Konfigurationsdatei sind. Dann setze ich die Anzeige- und Wert-Mitglieder und auch DataSource:

%Vor%

"Text" und "Key" sind Mitglieder der ComboItem-Klasse:

%Vor%

Nun das Problem: Wenn ich Undo mache, überprüfe ich alles, was nötig ist, um alle Cast-Operationen sicher und klar zu machen und zu versuchen, mit diesem Code "rückgängig zu machen":

%Vor%

Logger protokolliert nur. Das Op-Objekt wird aus der Undo-Sequenz übernommen und es gibt einen geeigneten Wert mit "GetOldValue ()". Dieser Code wirkt sich auf die Benutzeroberfläche aus, aber bis das Steuerelement seinen Fokus verliert. Es passiert beim nächsten Undo, was andere Kontrolle beeinflussen sollte und somit diese Combobox den Fokus verlieren lässt.

Ich bin mir sicher, dass dies beim Ereignis comboBox_LostFocus passiert, weil das erste, was ich an diesem Ereignis mache, Logging ist und es zeigt mir bereits den Wert, der NICHT sein sollte.

    
Revaz 12.12.2011, 08:55
quelle

1 Antwort

14

Ich denke, das Problem, das Sie sehen, ist, dass ComboBox einen Wert anzeigt, aber den Wert noch nicht in die Bindungsquelle geschrieben hat (was nicht geschieht, bis Sie den Fokus verlieren).

Sie können versuchen, etwas zu tun, um die Daten zu schreiben, wenn ein Element ausgewählt ist (vorausgesetzt, es gibt nur eine Datenbindung, die mit ComboBox verknüpft ist):

%Vor%

Und um sicher zu gehen, dass Sie dieses Ereignis entweder vom Designer abonnieren oder es manuell verkabeln:

%Vor%     
LarsTech 12.12.2011, 14:17
quelle