【发布时间】:2013-10-09 11:16:38
【问题描述】:
我正在使用 c#。
为什么 CausesValidation 属性不会从容器传播到子控件?
我有一个 TabControl,我需要对所有选项卡上的用户输入进行验证。 但是每个选项卡都是独立的。我发现如果我有一个像 TableLayoutPanel 这样的容器并且我将 CausesValidation 设置为 false,子组件仍然会执行验证。
所以这段代码行不通:
Foreach(Control c in Container.Controls)
{
c.CausesValidation = False;
}
如果您执行一些 DEBUG 输出,您将看到唯一找到的控件是 TableLayoutPanel 或任何其他容器,例如将找到并设置为 False 的 GroupBox。但是容器不会将该值传播到子级别。 很多人问我们如何解决这个问题。我找到了很多方法,但是我创建了一个静态类,允许我在 TabControl 上选择要执行验证的哪个选项卡,并且它将在该 TabControl 的所有控件上将 CausesValidation 设置为 False,包括带有10层的深度。如果你想要那个库,就去问吧!
我真正的问题是,容器不应该将该属性传播到其子控件,并将该子控件传播到任何子控件吗?!
它会为我们节省大量工作,而不是创建一个非常疯狂的代码,该代码非常特定于应该从头开始工作的东西?为什么没有暗示?
【问题讨论】:
标签: c# winforms validation