Определить во время выполнения, является ли вложенный элемент управления контейнером времени разработки

Последующий вопрос на мой предыдущий вопрос

«TabControl» работает несколько странно. У вас есть сам «TabControl», который не является контейнером, а является составной частью нескольких элементов управления «TabPage», которые являются контейнерами.

Моя первоначальная мысль заключалась в том, что если основной элемент управления не является контейнером, выполните итерацию дочерних элементов управления и рекурсивно вызовите мою функцию IsContainerControl. Однако это возвращает true для элементов управления «Panel» и «GroupBox», которые являются дочерними элементами управления как пользовательских элементов управления, так и подклассов стандартных элементов управления. Я также попытался проверить атрибут Designer в дочерних элементах управления, но они присутствуют в обоих случаях.

Обратите внимание, что в этих случаях установлен стиль ContainerControl, но среда IDE не позволяет добавлять в них элементы управления, поскольку они не размещаются непосредственно в форме. Теперь возникает вопрос: что IDE проверяет на элементах управления TabPage, чтобы определить, можно ли добавить к ним другие элементы управления?


person Richard Payne    schedule 13.02.2014    source источник
comment
Как насчет использования свойства Tag класса Control для добавления пользовательских данных в элементы управления?   -  person Oscar    schedule 13.02.2014
comment
Это может сработать, но очень беспорядочно и требует, чтобы все последующие разработчики знали об этом и не забывали это делать. Я ищу что-то общее и автоматическое. IDE может четко определить разницу без тегов, так что это возможно.   -  person Richard Payne    schedule 13.02.2014
comment
Среда IDE может определить это с помощью свойства Component.DesignMode, но оно может не работать в динамически добавленных элементах управления. msdn.microsoft.com/en-us/library/   -  person Oscar    schedule 14.02.2014