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

这是一个代码snipet:

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

有什么建议吗?

有帮助吗?

解决方案

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

同时检查表单上的AutoValidate属性。它可能设置为EnablePreventFocusChange(这是默认值)。

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

您可能需要查看MSDN上的这篇文章。 winforms验证一些细节。

其他提示

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

请注意,如果在将值写入对象时出现异常,则认为验证失败。

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

如果断点永远不会触发,则可能在数据绑定框架内发生异常。

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

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

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

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

请参阅有关Microsoft Connect的更多详细信息

以及:

无法转义空文本框

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top