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

Динамическая идентификация класса - C++ Builder

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

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

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

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

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

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

Спасибо!
http://www.cyberforum.ru/cpp-builder/thread2011267.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2018, 18:13
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Динамическая идентификация класса (C++ Builder):

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

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

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

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

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

4
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25609 / 17162 / 6825
Регистрация: 22.10.2011
Сообщений: 30,359
Записей в блоге: 6
22.05.2018, 18:16 #2
C++
1
if(frm->ClassNameIs("TForm1")) ...
Это имеется в виду?
0
Fastex007
0 / 0 / 2
Регистрация: 25.05.2013
Сообщений: 26
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
25609 / 17162 / 6825
Регистрация: 22.10.2011
Сообщений: 30,359
Записей в блоге: 6
22.05.2018, 18:33 #4
Нормально все работает, никакого AV нет:
C++
1
    dynamic_cast<TForm*>(Application->FindComponent(FormName))->Show();
, естественно, если форма уже создана к моменту попытки вызова (если в настройках проекта эту форму не убрали из списка Auto-create forms, например)
1
Fastex007
0 / 0 / 2
Регистрация: 25.05.2013
Сообщений: 26
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. Определить конструктор без параметров для дочернего класса
Доброго всем времени суток. Помогите решить проблемку. Хочу создать класс...

Переменные из функции класса в функцию другого класса
Подскажи пожалуйста,как с класса Convector передать в класс Filter одержанный...

Передача значения класса в функцию внутри класса
Всем привет. Вот столкнулся с таким вопросом Как передать значение класса в...


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

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

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