数据绑定Winforms文本框

3
简而言之,此数据绑定功能正常工作。
tbTotalTaxDue.DataBindings.Add("Text", I, "TotalTaxDue");

当我输入无效值,比如空字符串,然后离开文本框时,其中的值会恢复为以前的值。这是有道理的,因为输入的值不会进入十进制类型的对象属性中。不幸的是,以下任何一个数据绑定都会出现问题:

tbTotalTaxDue.DataBindings.Add("Text", I, "TotalTaxDue", true, DataSourceUpdateMode.OnPropertyChanged, 0, "C");
tbTotalTaxDue.DataBindings.Add("Text", I, "TotalTaxDue", true, DataSourceUpdateMode.OnValidation, 0, "C");

如果用户输入空字符串,与其他方式不同的是,输入框不会让用户跳出。有没有办法使数据绑定显示为货币,但只是取消任何无效的编辑呢?

1个回答

3
您有几个选项:
  1. 子类化TextBox并重写 OnValidating 事件。如果Text为空,请在调用MyBase.OnValidating()之前退出以抑制该事件。

  2. TextBox上设置CausesValidation = False,并处理 TextChanged 事件。如果Text不为空,则手动验证它。

希望这能帮到您。


这非常有帮助。为了我的自我提高,您知道为什么第一个验证没有必要吗?那个没有自定义显示格式的验证? - Adam Rackis
2
Add() 的第四个参数是一个布尔值,用于启用格式化;在后两个调用中,您将其设置为 true。Binding.FormattingEnabled 的默认值为 false,当设置为 true 时,它将执行类型检查。因为空字符串无法转换为十进制值,所以它不会通过验证。 - Rob
选项二会破坏绑定的格式,但选项一可以完美地工作。谢谢! - Adam Rackis
我应该更加具体;在第二个选项中,“手动验证”应包括对控件的正确“绑定”调用OnFormat()。 :) - Rob

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