我有一个文本框绑定到表单上的对象属性(实际上是几个文本框).这是一个对象的编辑器.当我正在编辑某些对象并修改其中一个文本框中的值时,我无法从文本框中退出(既不是通过选项卡也不是单击另一个文本框).然而情况并非总是如此 - 当编辑其他对象(相同类型)时,它可以正常工作.
这是一个代码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的入口点设置断点,该入口点绑定到光标卡住的控件.然后,单步查看是否引发异常.
如果断点永远不会触发,则可能在Databinding框架内发生异常.
与普遍认为相反,数据绑定框架会记录错误和其他有用信息 - 它使用System.Diagnostics命名空间的支持来执行此操作.我忘记了细节,但它们在MSDN上 - 您应该能够在应用程序运行时在Visual Studio的消息窗口中查看诊断信息.对于数据绑定的故障排除问题非常有用.