C# Verständnis/Fehlverhalten bei Databinding & Validation

Faust2011

HTTP 418 - I'm a teapot
Moderator
Registriert
Aug. 2011
Beiträge
12.818
Hallo,

ich habe an ein Textfeld ein Databinding, das auch soweit funktioniert. Nun habe ich einen Validator hinzugefügt. Jetzt ist es aber so, dass selbst wenn der Validator anschlägt, wird der Wert ins Model geschrieben. Was läuft denn hier falsch?

So siehts aus - die Textbox mit DataBindings und Validating/Validated:

Code:
            this.textBox1.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::WindowsFormsApplication1.Properties.Settings.Default, "Temperatur", true, System.Windows.Forms.DataSourceUpdateMode.OnValidation));
            this.textBox1.Location = new System.Drawing.Point(159, 69);
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(61, 20);
            this.textBox1.TabIndex = 2;
            this.textBox1.Text = global::WindowsFormsApplication1.Properties.Settings.Default.Temperatur;
            this.textBox1.Validating += new System.ComponentModel.CancelEventHandler(this.textBox1_Validating);
            this.textBox1.Validated += new System.EventHandler(this.textBox1_Validated);

Und noch die Validated-Methode:

Code:
        private void textBox1_Validating(object sender, CancelEventArgs e)
        {
            // hier die Validation durchführen
            // -> e.Cancel hiermit kann die Validation als erfolgreich/erfolglos ausgelöst werden
            // per ErrorProvider die Oberfläche für den Benutzer Feedback
            e.Cancel = true;
            MessageBox.Show("Validating not successful!");
        }

Ich hab mal mein Kommentar drin stehen lassen - er drückt aus, wie ich es verstehen würde.

Das Problem: Obwohl ich in Validating ein e.Cancel=true setze, wird der Wert (über das Databinding) in den Properties.Settings.Default gesetzt.
Ergänzung ()

Ich habe es nun gelöst. Da scheint es eine Besonderheit mit den Application-Properties zu geben: Diese werden für sich selbst validiert, d.h. man etabliert ein DataBinding, aber die Validierung erfolgt damit:

Code:
            voreinstellungen.SettingChanging += new SettingChangingEventHandler(voreinstellungen_SettingChanging);

Im EventHandler hat man Zugriff auf die EventArgs und kann dort auch Cancel=True setzen. Damit wird dann tatsächlich verhindert, dass der Wert in den AppProperties landet.
 
Zuletzt bearbeitet:

Ähnliche Themen

Zurück
Oben