Как динамически вызвать форму в C++ Builder XE3?
Я создаю приложение, в котором я заполняю меню с использованием БД. Я могу создать пункты меню, но у меня возникли проблемы с привязкой события "При нажатии" к конкретным формам. Я сохранил имена классов форм в моей БД и пытаюсь использовать RTTI для их связывания во время выполнения. Ниже приведен фрагмент моего кода, который я пытаюсь запустить.
__fastcall TfrmMainMDI::TfrmMainMDI(TComponent *Owner)
: TForm(Owner)
{
// Register 2 form classes
RegisterClass(__classid(TfrmSecurity));
RegisterClass(__classid(TfrmPassword));
}
Теперь, когда я пытаюсь запустить следующий код для вызова формы, выдается ошибка "Нарушение прав доступа".
TForm *frm = (TForm*)TFormClass(FindClass(formName));
UnicodeString str = frm->Name;
frm->Show();
2 ответа
Решение
Сделай это:
TForm *frm = 0;
Application->CreateForm( TFormClass(FindClass(formName)), &frm );
Тогда если frm
не нуль,
frm->Show();
TForm *frm = new TForm(this);
if( frm != NULL )
{
frm->ShowModal();
//or
frm->Show();
}