【问题标题】:Label Validating Event Not Firing标签验证事件未触发
【发布时间】:2008-11-10 03:16:27
【问题描述】:

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

我有两个并排的文本框。这些用于 %/% 拆分分配,例如 80/20、50/50 等。因此,我对每个框进行了验证,以确保它们的值 >= 0 和

我知道我可以在单个文本框验证事件中执行此操作。我只是不想要那种行为。我宁愿在每个文本框上都有一条离散消息,说明其内容超出了值的有效域,并且如果它们的总数不是 100,则通过标签显示错误消息。

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

有什么想法吗?

【问题讨论】:

    标签: .net vb.net validation


    【解决方案1】:

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

    您的情况并不少见,您有一个显示“正整数”的字段级验证和一个显示 A 和 B 的总和必须等于 100% 的业务规则。

    处理此问题的一种方法是延迟执行业务规则,直到表单完成;这将需要在用户单击“确定”按钮(或 Web 表单中的“提交”按钮)时验证业务规则

    如果您想要即时验证,只需将两个字段的验证方法都调用业务规则验证方法

    【讨论】:

      【解决方案2】:

      请问这是网络项目还是表单项目?

      用户不能在标签中输入任何数据,所以我不明白他们为什么会触发验证。

      【讨论】:

        【解决方案3】:

        寻找“文本更改”事件,我认为您误解了在控件的情况下使用验证。

        在处理 tb1 的“文本更改”事件的方法中,您可以在编辑 tb2 中的更改值时添加与 100 互补的代码,反之亦然,编辑 tb2 将导致 tb1 中的自动更改。您还可以在此事件处理程序中对不正确的值做出反应

        保重

        【讨论】:

        • 我知道有 50 种方法可以做到这一点。我正在使用 CLR 中的内置验证。因此,我对每个条目控件(例如文本框)进行了验证。为了利用这一点,您将代码放置在 Validating 事件中。这不是“错误”,“文本更改”是做我想做的事情的错误地方。
        • 因此,我想将验证逻辑放在与我编写的两个控件相邻的标签上。然而,尽管拥有所有与验证相关的属性和事件,验证事件不会在标签上触发,即使在表单上调用 Me.ValidateChildren() 时也是如此。
        【解决方案4】:

        根据 CausesValidation 的文档:

        “获取或设置一个值,该值指示控件是否会导致对任何需要验证的控件执行验证。”

        在我自己的测试中,我必须专门调用 Label.Focus(),然后跳出该字段(或调用另一个 control.Focus())才能触发事件。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多