2008-11-10 82 views
1

我希望在VB.Net(Visual Studio 2005,.Net Runtime 2.0)中的标签上使用Validating事件。标签验证事件未触发

我有两个并排的文本框。这些是用于%/%分割分配,例如80/20,50/50等。因此,我在每个框上都进行了验证,以确保它们的值大于等于0并且< = 100。我希望拥有标签,把该文本框的左侧有其自己的验证,这将确保两个文本框值总和正好100

我知道我可以在单独的文本框验证事件做到这一点。我只是不想要那样的行为。我宁愿在每个文本框上留下一个离散消息,指出其内容在有效值域之外,并且如果它们的总数不为100,则标签中会显示错误消息。

问题是,尽管设置了CausesValidation =标签控件上的True,它们的验证事件不会触发。即使在表单级别手动调用Me.ValidateChildren()也不会触发标签事件。

任何想法?

回答

2

验证事件适用于具有可编辑值的控件。标签没有可编辑的值。

你的情况并不少见,你有一个字段级的验证,上面写着“正整数”,并且说值A和B的总和必须等于100%的业务规则。

解决此问题的一种方法是延迟执行业务规则,直到表单完成;这将需要验证业务规则,当用户点击OK按钮(或在Web表单提交按钮)

如果你想即时验证,只是验证方法对于这两个领域调用业务规则验证方法

0

请问这是一个网络或表单项目吗?

用户无法输入任何数据到一个标签,所以我不明白为什么他们会解雇验证。

0

拿来看“文本改变”事件,我想你missunderstand在控制情况下,使用验证。

在负责处理“文本改为”法事件TB1你可以把代码,而在TB2编辑变化值是100互补,反之亦然编辑TB2将导致TB1自动变化。你也可以把不当值

照顾

+0

我知道有50种方法可以做到这一点。我正在使用CLR中的内置验证。因此,我对每个输入控件进行了验证,例如文本框。为了利用这一点,您将代码放置在验证事件中。这不是“错误的”,“文字改变”是做错我想要的地方的错误地方。 – 2008-11-16 20:01:30

0

此事件处理反应根据对的CausesValidation的文档:

“获取或设置一个值,指示控件是否会引起验证,可在任何执行当它获得焦点时需要验证的控件。“

在我自己的测试,我不得不专门致电Label.Focus()选项卡,然后从该字段(或者调用另一个control.Focus())的触发事件。

我真的认为你使用错误的方法来获得你正在寻找的结果。我认为让文本框中的验证器调用相应地设置标签的实用程序方法会更好。