我希望在VB.Net(Visual Studio 2005,.Net Runtime 2.0)的标签上使用Validating事件。
我有两个文本框并排。这些用于%/%拆分分配,例如80 / 20,50 / 50等。所以,我在每个框上都有验证,以确保它们的值>&0;并且<= 100.这是我的愿望让文本框左侧的标签有自己的验证,这将确保两个文本框的值总共正好为100.
我知道我可以在单独的文本框验证事件中执行此操作。我只是不想要那种行为。我宁愿在每个文本框上都有一条离散消息,说明其内容超出了有效的值域,如果标签的总数不是100,则标签会显示错误消息。
问题在于,尽管在Label控件上设置CausesValidation = True,但它们的Validating事件不会触发。即使在表单级别手动调用Me.ValidateChildren()也不会触发标签事件。
有什么想法吗?
答案 0 :(得分:2)
验证事件适用于具有可编辑值的控件。标签没有可编辑的值。
您的情况并不罕见,您的字段级验证显示为“正整数”,而业务规则则表示值A和B的总和必须等于100%。
处理此问题的一种方法是在表单完成之前延迟执行业务规则;这将需要在用户单击“确定”按钮(或Web表单中的“提交”按钮)时验证业务规则
如果您想要即时验证,只需让两个字段的验证方法都调用业务规则验证方法
答案 1 :(得分:0)
我可以问这是一个网络或表单项目吗?
用户无法在标签中输入任何数据,因此我不明白为什么会激活验证。
答案 2 :(得分:0)
请注意“文本已更改”事件,我认为您在控件的情况下很难理解使用验证。
在处理tb1的“文本更改”事件的方法中,您可以将编辑tb2中的更改值的代码与100互补,反之亦然编辑tb2将导致tb1自动更改。您还可以将此事件处理程序放入反应中以获取不正确的值
小心
答案 3 :(得分:0)
根据CausesValidation的文档:
“获取或设置一个值,该值指示控件是否会在接收焦点时对需要验证的任何控件执行验证。”
在我自己的测试中,我必须专门调用Label.Focus()然后选择该字段(或调用另一个control.Focus())来触发事件。
我真的认为您使用错误的方法来获得您正在寻找的结果。我认为最好让文本框中的验证器调用一个实用程序方法来相应地设置标签。