Сложный вопрос по 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.429 из 5
Похожие ответы