【发布时间】:2014-03-16 03:30:47
【问题描述】:
我正在构建一个应用程序,其中我使用 DB 填充菜单。我可以创建菜单项,但我无法将“单击时”事件链接到特定表单。我已经在我的数据库中存储了表单类的名称,并尝试使用 RTTI 在运行时绑定它们。以下是我尝试运行的代码的 sn-p。
__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();
【问题讨论】:
-
试试这个:
TForm *frm = 0; Application->CreateForm( TFormClass(FindClass(formName)), &frm);然后如果frm不再为空,frm->Show() -
完美!有用。谢谢。
-
@MattMcNabb 你应该把你的评论变成一个答案。
-
其实RegisterClass/FindClass我没用过,是从this page得到的。此外,我不确定如果表单创建失败会发生什么,也不确定是否仍然可以使用
Application->CreateForm( FindClass(formName) ), &frm );,如果它确实可以更简单!希望专家能加入。 -
在过去的 3 个小时里,我一直在尝试使用此 RegisterClass 方法,但没有成功。我也已经检查了该链接,但信息对我来说有点太混乱了。我试图将 delphi 代码逐行“转换”为 C++,但它没有用。您的解决方案非常有效!