Мне нужно управлять всеми элементами управления в форме. Я в порядке с доступом к коллекции Controls для этого. Проблема связана с попыткой включить любые элементы управления, содержащиеся в элементах управления контейнером, таких как GroupBox
или Panel
. Я мог бы рекурсивно перебирать каждую коллекцию Controls каждого Control, но затем получает доступ к всем элементарным элементам управления для контейнеров с нестандартным временем.Определите во время выполнения, если элемент управления позволяет добавить к нему другие элементы управления во время разработки
Поскольку мои элементы управления, не связанные с контейнером, управляют состоянием их составных элементов управления на основе их собственных свойств, я не начинаю возиться с составными элементами управления.
Как определить, является ли элемент управления контейнером времени, так что я могу избежать процесса, который не является?
Я попытался проверки атрибута конструктора, но это возвращает нуль для обоих ComboBox
и GroupBox
:
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', и очень легко * исключить его из рекурсии. – Sinatr
Любой составной пользовательский контроль. Я не могу явно проверить все возможности. –
'UserControl' только? Исключить все из них! – Sinatr