数据绑定的文本框:无法退出

6
我有一个文本框绑定在表单上的一个对象属性上(实际上是几个文本框)。这个表单是一个对象的编辑器。当我编辑某些对象并修改其中一个文本框中的值时,我无法从文本框中退出(无论是通过Tab键还是点击另一个文本框)。然而,并非总是如此 - 当编辑其他同类型的对象时,它可以正常工作。
以下是代码片段:
txtValue.DataBindings.Add("Text", _SourceObject, "PlannedValue", True, DataSourceUpdateMode.OnPropertyChanged, Nothing, "c")
txtEstPlacements.DataBindings.Add("Text", _SourceObject, "EstimatedPlacementCount")
txtReference.DataBindings.Add("Text", _SourceObject, "Reference")

有任何建议吗?
3个回答

16

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

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

另外,也有可能是文本框中提供的值无法转换为源数据对象上绑定属性的类型。我相信这里使用了Convert类(但我可能错了)。

你可以查看MSDN上的这篇文章,详细介绍了winforms的验证。


谢谢!将表单的AutoValidate属性设置为EnableAllowFocusChange就可以了。 - Muxa

6
如果您的表单具有AutoValidate==EnablePreventFocusChange,则光标会停留在任何未通过验证的字段中。
请注意,如果将值写入对象时发生异常,则认为验证失败。
尝试在绑定到光标停留的控件的属性的setter的入口点处设置断点。然后,逐步执行以查看是否引发异常。
如果断点从未触发,则异常可能发生在Databinding框架内。
与普遍的信仰相反,数据绑定框架确实记录错误和其他有用信息-它使用System.Diagnostics命名空间的支持来完成此操作。我忘记了细节,但它们在MSDN上-您应该能够在Visual Studio的消息窗口中查看诊断信息,而应用程序正在运行。非常有用于解决Databinding问题。

5
为了解决验证失败的问题,这是由于数据绑定无法将DBNull.Value设置到文本框中,您可以在Form_Load部分添加以下行:
TextBox1.DataBindings["Text"].NullValue = string.Empty;

对于每个您想要允许空值的文本框,您需要正确验证其有效性。

在Microsoft Connect上查看更多详细信息.

并且:

无法跳过空文本框


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接