Я ищу некоторый код BCB, чтобы перебирать элементы управления на форме и получать некоторую информацию о них.BCB: как перебрать элементы управления на форме?
Я пробовал использовать myForm->ControlCount
и typeid(myForm->Controls[i])
, но это дало мне несколько проблем.
1) typeid(myForm->Controls[i])->Name
всегда дает "TControl *"
, и я надеялся на "TEdit *", "*" TMemo и т.д.
Могу ли я обойти, что с помощью
if (typeid(myForm->Controls[i]) == typeid(TEdit))
, а затем литье? (если да, то как лучше всего лить?)
2) как я могу (возможно, путем литья) получить свойства элемента управления? например, имя, ширина, высота и т. д.?
Я действительно ценю действительный код здесь (или URL-адрес какого-либо фактического кода); Благодарю.
Обновление: Так как мне нужно только для тестирования 5 OT 6 различных типов элементов управления для моего конкретного случая, я думал, что я мог бы, возможно, попытаться dynamic_cast<>
друг к каждому из них, в свою очередь, но я не могу показаться, получите это, чтобы сработать ...
Спасибо, Томми. Я отказался и закодировал это Pascal, используя оператор 'is'. Это здорово, что можно сделать это на C++. YOu say '' Вам не нужно делать функцию рекурсивной для дочерних элементов управления дочерних элементов управления, они также включены в VCL «', но что произойдет, если бы у меня было, скажем, TRadioGroup или некоторые элементы управления на TPanel? Они подхвачены вашим кодом? – Mawg
Кстати, мне пришлось рекурсивно отвечать за TPanel и TGroupBox – Mawg
Список Controls [] определен для родителя, к которому вы обращаетесь. Вложенные дочерние элементы управления должны обрабатываться с рекурсией. –