【问题标题】:C# UserControl ValidationC# 用户控件验证
【发布时间】:2025-11-26 00:00:01
【问题描述】:

我有一个包含三个选项卡的选项卡控件的用户控件。选项卡中有多个控件 - 日期时间选择器、文本框、组合框。

还有一个保存按钮,单击该按钮时,会调用this.ValidateChildren(ValidationConstraints.Enabled) 现在,我单击保存并发生geniune 验证错误。我更正了错误,然后再次单击保存 - 验证错误发生在不同选项卡上的组合框上。如果我导航到此选项卡并单击保存,一切正常。怎么会这样?我没有更改组合框中的任何值,那么验证失败如何通过验证?

组合框绑定到带有 selectedValue 和 Text 集的数据集。我只是不明白这里发生了什么。

某些文本框也会出现这种情况。验证规则是它们必须是小数 - 默认值为零,这是允许的。同样的事情发生了,他们第一次验证失败 - 我没有做任何更改,再次点击保存,他们通过验证。

编辑:

该错误不是框架错误 - 该错误是我在验证例程中提供的错误。例如,选择一个有效的下拉选项。

我逐步完成了这个过程,有时组合框的值是默认值,有时选定的值是默认值,但文本为空。如果我不更改组合框中的任何内容,我看不出这会如何发生。

如果您需要任何进一步的信息,请告诉我

谢谢

巴里

【问题讨论】:

    标签: c# winforms validation user-controls


    【解决方案1】:

    以下引自MSDN:

    “在标签页显示之前不会创建 TabPage 中包含的控件,并且在显示标签页之前不会激活这些控件中的任何数据绑定。”

    所以我猜如果在您第一次按保存之前,您确保您至少单击了每个选项卡一次,它会按预期工作,但如果您不查看所有选项卡保存前失败了?

    【讨论】:

    • 谢谢何 - 这就是我所缺少的。我添加了一些代码来遍历 UserControl 的 Load 事件中的每个选项卡,并且验证按预期工作。我非常困惑并专注于验证,我真的不认为它可能是其他任何东西。感谢您的帮助
    • 对于这个问题的新手来说,关键是遍历每个选项卡并在每个选项卡上执行 .Show()。见:social.msdn.microsoft.com/Forums/windows/en-US/…
    【解决方案2】:

    你检查过默认值不是null吗?

    【讨论】:

    • 默认值不是 Null。默认值设置为数据集中的有效选项。例如 SelectedValue 是 1 - 文本是“我的下拉选项文本”