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