Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Fastex007
0 / 0 / 0
Регистрация: 25.05.2013
Сообщений: 31
#1

Динамическая идентификация класса

22.05.2018, 18:13. Просмотров 175. Ответов 4

Здравствуйте!

Пишу на C++ Builder XE.

Можно ли как-то динамически идентифицировать форму, описанную в классе ?
Есть несколько форм (классов) TForm1, TForm2, TForm3 , ..., TFormN. И я знаю их имена (следовательно я знаю имя класса и имя объекта этого класса), но только в виде текста.

В dynamic_cast требуется указать тип, но он каждый раз разный (классы-то по-разному называются). Возник вопрос, что можно сделать с текстовым названием класса.

Есть какой-то механизм динамической идентификация формы ?

Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2018, 18:13
Ответы с готовыми решениями:

Идентификация файлов Word
Доброго времени суток, столкнулся с такой проблемой, есть необходимости...

CategoryButtons, идентификация категории
В событии cBButtonClicked появляется возможность узнать ID нажатой кнопки. Одна...

Идентификация пользователя на интерфейсе USB
Помогите с заданием.Разработать программу которая будет генерировать на флеш...

Можно ли объявлять в описании одного класса объекты другого класса
Здравствуйте! Помогите, пожалуйста, разобраться: я описал класс SignalZakon, а...

Использовать private члены класса внутри static ф-ий этого же класса.
Все привет! Такая вот проблема. Есть класс (естественно тестовый, для...

4
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25967 / 17411 / 6906
Регистрация: 22.10.2011
Сообщений: 30,655
Записей в блоге: 6
22.05.2018, 18:16 #2
C++
1
if(frm->ClassNameIs("TForm1")) ...
Это имеется в виду?
0
Fastex007
0 / 0 / 0
Регистрация: 25.05.2013
Сообщений: 31
22.05.2018, 18:26  [ТС] #3
Цитата Сообщение от volvo Посмотреть сообщение
Это имеется в виду?
Нет.
Требуется с формы MainForm открывать другие формы, например TForm1, TForm2, TForm3 , ..., TFormN.
Какая форма будет открыта зависит от некоторых условий. Но суть в том, что открывать их нужно с одной и той же кнопки на MainForm.

Первое, что пришло в голову это:
C++
1
dynamic_cast <TForm *>(FindComponent(FormName))->Show()
, где FormName - имя формы.

И этот код даже компиллится, но при выполнении - Access Violation.

Нужно динамически, зная имя формы, запустить её.

Спасибо!
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25967 / 17411 / 6906
Регистрация: 22.10.2011
Сообщений: 30,655
Записей в блоге: 6
22.05.2018, 18:33 #4
Нормально все работает, никакого AV нет:
C++
1
    dynamic_cast<TForm*>(Application->FindComponent(FormName))->Show();
, естественно, если форма уже создана к моменту попытки вызова (если в настройках проекта эту форму не убрали из списка Auto-create forms, например)
1
Fastex007
0 / 0 / 0
Регистрация: 25.05.2013
Сообщений: 31
25.05.2018, 00:19  [ТС] #5
Благодарю!
Я не учёл, что ищу компоненты в текущем классе, откуда произвожу вызов.
0
25.05.2018, 00:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2018, 00:19

Как правильно создать массив объектов текущего класса в методе данного класса?
Привет! Ставится задача создания метода, который формирует массив объектов....

Указатель на метод класса в качестве аргумента метода класса
Функция _createFun вызывается для создания ХХХ в основном классе. Но вот...

Создать класс наследник от класса TForm1. Определить конструктор без параметров для дочернего класса
Доброго всем времени суток. Помогите решить проблемку. Хочу создать класс...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru