Как динамически вызвать форму в 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();
}
Другие вопросы по тегам