Frage

Ich habe ein Textfeld, das an die Eigenschaft eines Objekts (eigentlich mehrere Textfelder) in einem Formular gebunden ist.Dies ist ein Editor für ein Objekt.Wenn ich einige Objekte bearbeite und Werte in einem der Textfelder ändere, kann ich das Textfeld nicht verlassen (weder über die Tabulatortaste noch durch Klicken auf ein anderes Textfeld).Dies ist jedoch nicht immer der Fall – beim Bearbeiten anderer Objekte (des gleichen Typs) funktioniert es einwandfrei.

Hier ist ein Codeausschnitt:

txtValue.DataBindings.Add("Text", _SourceObject, "PlannedValue", True, DataSourceUpdateMode.OnPropertyChanged, Nothing, "c")
txtEstPlacements.DataBindings.Add("Text", _SourceObject, "EstimatedPlacementCount")
txtReference.DataBindings.Add("Text", _SourceObject, "Reference")

Irgendwelche Vorschläge?

War es hilfreich?

Lösung

Klingt nach einem Problem der Datenvalidierung. Überprüfen Sie, ob die Steuerelemente auf dem Formular ihre Ursachenvalidierungseigenschaften auf true oder false festlegen.

Überprüfen Sie auch die automatische Eigenschaft auf dem Formular. Es ist wahrscheinlich so eingestellt, dass PreventFocuSchange (der Standard ist).

Es kann auch der Fall sein, dass der im Textfeld gelieferte Wert nicht in den Typ der Eigenschaft konvertiert werden kann, an den er im Quelldatenobjekt gebunden ist. Ich glaube, die Konvertitenklasse wird dafür verwendet (obwohl ich hier möglicherweise falsch liegt).

Möglicherweise möchten Sie sich auschecken Dieser Artikel Auf MSDN, das die Validierung der Gewinne ausführlich abdeckt.

Andere Tipps

Wenn Ihr Formular AutoValidate==EnablePreventFocusChange hat, bleibt der Fokus in jedem Feld hängen, dessen Validierung fehlschlägt.

Beachten Sie, dass die Validierung als fehlgeschlagen gilt, wenn beim Schreiben des Werts in das Objekt eine Ausnahme auftritt.

Versuchen Sie, einen Haltepunkt am Einstiegspunkt des Setters der Eigenschaft festzulegen, die an das Steuerelement gebunden ist, an dem der Cursor hängen bleibt.Anschließend wird in einem Schritt überprüft, ob eine Ausnahme ausgelöst wird.

Wenn der Haltepunkt nie ausgelöst wird, kann die Ausnahme innerhalb des Databinding-Frameworks auftreten.

Entgegen der landläufigen Meinung protokolliert das Datenbindungs-Framework Fehler und andere nützliche Informationen – es nutzt dazu die Unterstützung des System.Diagnostics-Namespace.Ich habe die Details vergessen, aber sie sind auf MSDN – Sie sollten in der Lage sein, die Diagnose im Meldungsfenster von Visual Studio anzuzeigen, während Ihre Anwendung ausgeführt wird.Sehr nützlich für die Fehlerbehebung bei Problemen mit der Datenbindung.

Um den Validierungsversagen zu beheben, der auf die Unfähigkeit der Datenbank zu finden ist DBNull.Value In die textBox.text können Sie die folgende Zeile im Abschnitt "Form_load" hinzufügen:

TextBox1.DataBindings["Text"].NullValue = string.Empty;

Für jedes Textfeld möchten Sie den leeren Wert korrekt validiert werden.

Weitere Informationen zu Microsoft Connect finden Sie.

und auf:

Die leere Textbox kann nicht entkommen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top