Сложный вопрос по UserControl-ам - VB
Формулировка задачи:
Есть такая чудесная библиотека - TLBINF32.DLL, с помощью которой можно получить список всех свойств заданного элемента управления. Например:
И пример вызова:
Примечание: класс clsMember описан так:
В реальной моей ситуации контрол ct получается не прямым присваиванием (хотя и так тоже можно, конечно), а из перебора всех элементов Me.Controls. Таким образом можно составить список свойств для каждого контрола формы.
Этот список получается полным - в нём будут действительно все свойства контрола, а не только те, что видны в окошке Property Browser. Например, для текстбокса мы увидим не только свойство Font, но и свойство FontBold, для комбобокса - не только List, но и ListIndex, и так далее.
Итак, всё чудесно. А теперь усложняем ситуацию. Допустим, что приведённый выше 'Пример вызова' запускается не из формы, а из кода некоего нашего UserControl-а, размещённого на этой форме. Естественно, перебирать коллекцию Me.Controls уже нельзя; вместо неё нужно перебирать коллекцию ParentControls. И вот в этом случае в коллекцию propList попадут, увы, НЕ ВСЕ свойства контрола ct, - а именно, попадут лишь те, что видны в окошке Property Browser. Например, для комбобокса в коллекцию не попадёт свойство ListIndex, и т.д.
Такое впечатление, что с точки зрения библиотеки 'TypeLib Information' (TLBINF32.DLL) свойства контролов имеют как бы 'ограниченную область видимости': с родительской формы они видны все, из UserControl-а (в моём случае - с его Property Page) - лишь их часть.
Вопрос: как это можно обойти?
Приходит в голову следующее:
В коде property-странички UserControl-а получаем в переменную ct (объявленную As Control) очередной контрол с родительской формы (т.е. через коллекцию ParentControl). Динамически создаём на property-страничке контрол того же типа, и вот его уже и 'скармливаем' функции CollectProperties. После заполнения коллекции propList временный контрол со странички удаляем. Вроде просто, только вот непонятно, как создать контрол 'того же типа', что и 'сидящий' внутри переменной ct.
Может, есть и другие решения?!
PS: Список свойств нужно получать именно из UserControl-а! Т.е. 'на лету'. Вариант 'получить их в коде формы, куда-нибудь сохранить, а потом оттуда закачать в код UserControl-а' - не подходит.
Решение задачи: «Сложный вопрос по UserControl-ам»
textual
Листинг программы
Friend Property Get parControls() As ParentControls Set parControls = ParentControls End Property
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д