【发布时间】:2014-03-09 09:50:43
【问题描述】:
我需要操作表单上的所有控件。我可以访问 Controls 集合来执行此操作。问题在于尝试包含容器控件中包含的任何控件,例如GroupBox 或Panel。我可以递归地迭代每个 Control 自己的 Controls 集合,但这会访问非设计时容器的所有组成控件。
由于我的非容器控件都根据它们自己的属性来管理它们的子控件的状态,所以我不会开始弄乱子控件。
如何确定控件是否是设计时容器,以便避免处理那些不是的?
我已经尝试检查 Designer 属性,但这对于 ComboBox 和 GroupBox 都返回 null:
foreach(Attribute attr in typeof(ctl).GetCustomAttributes(typeof(Attribute), false))
{
if(typeof(DesignerAttribute).IsAssignableFrom(attr.GetType()))
{
DesignerAttribute da = (DesignerAttribute)attr;
}
}
ctl 是 Control 类型,在我的测试中是 Combox 或 GroupBox。
在这两种情况下,GetCustomAttributes 返回一个包含 1 个属性的数组,即工具箱图标。
我也尝试过检查 ContainerControl 类的可分配性,但它们都是因为,我认为它们都将在运行时包含控件。
如何检测设计时容器?
【问题讨论】:
-
哪个控件包含您不想要的其他控件?我只知道一个 -
PropertyGrid,并且很容易将它排除从递归中。 -
任何复合用户控件。我无法明确测试所有可能性。
-
UserControl仅?排除所有这些! -
那么作为设计时容器的用户控件呢?
-
有吗?子类化
Panel不是UserControl。
标签: c# controls containers design-time