C++ 显示不同形式的VCL
我正在创建一个包含多个表单的VCL表单应用程序。我创建了一个名为formCreateAppointment的新表单 我正试图通过菜单项中的以下代码加载表单:C++ 显示不同形式的VCL,c++,forms,vcl,C++,Forms,Vcl,我正在创建一个包含多个表单的VCL表单应用程序。我创建了一个名为formCreateAppointment的新表单 我正试图通过菜单项中的以下代码加载表单: formCreateAppointment.Show(); 我得到这个错误: E2451未定义符号“formCreateAppointment” 我是否必须将此表单声明为“全局”对象或类似对象 谢谢 更多信息 表单“formCreateAppointment”位于项目->选项->自动创建表单下。当我使用代码时: formCreateApp
formCreateAppointment.Show();
我得到这个错误:
E2451未定义符号“formCreateAppointment”
我是否必须将此表单声明为“全局”对象或类似对象
谢谢
更多信息
表单“formCreateAppointment”位于项目->选项->自动创建表单下。当我使用代码时:
formCreateAppointment->Show();
我的代码将无法编译,出现以下错误:
E2451未定义的符号“formCreateAppointment”显然,您已经在其他地方将表单创建为局部变量,这就是为什么您无法从尝试调用它的位置访问它 您可以使用三种方法来解决此问题:
- 在要显示表单的确切位置创建表单。但是,只有在从一个地方调用表单时,这才有效
- 将其创建为全局变量李>
- 在堆中创建它,并在主窗体中存储指向它的指针。例如:
class MyMainForm { public: MyMainForm() { //create the form in the constructor formCreateAppointment = new myOtherForm(); } ~MyMainForm() { delete formCreateAppointment; } //code private: myOtherForm * formCreateAppointment; }
#ifndef Unit2H
#define Unit2H
#include <Classes.hpp>
//...
class TformCreateAppointment : public TForm
{
//...
};
extern PACKAGE TformCreateAppointment *formCreateAppointment; // <-- here
#endif
如果在项目选项中将该表单设置为自动创建,则该全局指针将在程序启动时为您自动实例化(通过在项目的WinMain()
函数中插入对Application->CreateForm()
的调用)。否则,您必须使用new
操作符在代码中手动实例化它
无论哪种方式,变量都是指针。VCL对象不能在堆栈上实例化,只能在堆上实例化。您必须使用->
操作符来访问表单对象的成员,例如:
formCreateAppointment->Show();
如果要使用
运算符,则必须首先取消对指针的引用:
(*formCreateAppointment).Show();
表单不是一个变量。它是一个具有控件和其他关联对象的窗体。它的名字是formCreateAppointment。我不是只使用简单的.show方法来显示它吗?@user,表单不是变量,而是对象。就像任何其他对象一样,应该首先创建它,然后才能调用它的方法。
(*formCreateAppointment).Show();