Не перебирается коллекция элементов в GroupBox C++/CLI
Не могу понять, как перебрать все радиобаттоны в GroupBox. Попробовал сделать в C#-стайл:
for each (Control c in Age_GBox.Controls)
{
MessageBox::Show(c.ToString());
}
Ругается на то, что .Controls возвращает System::Object^.
Ок, поменял тип. Сделал так:
for each (System::Object ^ c in Age_GBox.Controls)
{
MessageBox::Show(c.ToString());
}
Заработало, тип элементов выводит. Попытался на радостях получить доступ к свойству Checked да и вообще любому другом свойству. Не выходит, этот объект вообще не имеет никаких свойств, кроме стандартных вроде Clear, Add, ToString и пр. Что не так?
Ответы (1 шт):
Очевидно, что если при итерации используется объект базового класса System::Object, то и методы у него будут доступны только этого класса. Если нужно вызвать метод какого-то производного класса, то сначала нужно убедиться, что объект реально соответствует этому классу, и уже после вызвать нужный метод. Делается это путём приведения типов. См. operator dynamic_cast:
RadioButton^ rb = dynamic_cast<RadioButton^>(c);
if (rb != nullptr) {
bool checked = rb->Checked();
}