数据绑定TextBox:无法退出

Mux*_*uxa 5 .net data-binding textbox winforms

我有一个文本框绑定到表单上的对象属性(实际上是几个文本框).这是一个对象的编辑器.当我正在编辑某些对象并修改其中一个文本框中的值时,我无法从文本框中退出(既不是通过选项卡也不是单击另一个文本框).然而情况并非总是如此 - 当编辑其他对象(相同类型)时,它可以正常工作.

这是一个代码snipet:

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

有什么建议?

orj*_*orj 14

听起来像数据验证问题.检查表单上的控件是否将其CausesValidation属性设置为true或false.

还要检查表单上的AutoValidate属性.它可能设置为EnablePreventFocusChange(这是默认值).

也可能是这样的情况:文本框中提供的值无法转换为它在源数据对象上绑定的属性的类型.我相信Convert类用于此(虽然我可能在这里错了).

您可能希望在MSDN上查看本文,其中详细介绍了winforms验证.


Bev*_*van 5

如果您的表单具有AutoValidate == EnablePreventFocusChange,那么您最终会将焦点停留在未通过验证的任何字段中.

请注意,如果在将值写入对象时发生异常,则认为验证失败.

尝试在属性的setter的入口点设置断点,该入口点绑定到光标卡住的控件.然后,单步查看是否引发异常.

如果断点永远不会触发,则可能在Databinding框架内发生异常.

与普遍认为相反,数据绑定框架会记录错误和其他有用信息 - 它使用System.Diagnostics命名空间的支持来执行此操作.我忘记了细节,但它们在MSDN上 - 您应该能够在应用程序运行时在Visual Studio的消息窗口中查看诊断信息.对于数据绑定的故障排除问题非常有用.


小智 5

为了修复由于无法将数据绑定设置DBNull.Value到 textbox.text而导致的验证失败,您可以在 Form_Load 部分添加以下行:

TextBox1.DataBindings["Text"].NullValue = string.Empty;
Run Code Online (Sandbox Code Playgroud)

对于您希望允许正确验证空值的每个文本框。

查看有关 Microsoft Connect 的更多详细信息

并在:

无法转义空文本框