【问题标题】:VCL Showing a different formVCL 显示不同的形式
【发布时间】:2012-09-24 07:09:06
【问题描述】:

我正在创建一个包含多个表单的 VCL 表单应用程序。我创建了一个名为 formCreateAppointment 的新表单。

我正在尝试通过 menuItem 中的此代码加载表单:

formCreateAppointment.Show();

我收到此错误:

E2451 未定义符号“formCreateAppointment”

我是否必须将此表单声明为“全局”对象或类似的东西?

谢谢

更多信息

“formCreateAppointment”表单位于项目->选项->自动创建表单下。当我使用代码时:

formCreateAppointment->Show();

我的代码无法编译,并且出现以下错误:

E2451 未定义符号“formCreateAppointment”

【问题讨论】:

    标签: c++ forms vcl


    【解决方案1】:

    当您在 IDE 中创建新的 Form 类时,生成的 .hpp 文件包含一个全局指针,例如:

    #ifndef Unit2H
    #define Unit2H
    
    #include <Classes.hpp>
    //...
    
    class TformCreateAppointment : public TForm
    {
        //...
    }; 
    
    extern PACKAGE TformCreateAppointment *formCreateAppointment; // <-- here
    
    #endif
    

    听起来你没有#include'd 那个 .hpp 文件到你的主代码中,例如:

    #include "Unit2.hpp" // (or whatever you decided to name that Form's unit as)
    

    如果您在项目选项中将该表单设置为自动创建,则该全局指针将在程序启动时为您自动实例化(通过在项目的WinMain() 函数中插入对Application-&gt;CreateForm() 的调用)。否则,您必须使用 new 运算符在代码中手动实例化它。

    无论哪种方式,变量都是一个指针。 VCL 对象不能在栈上实例化,只能在堆上实例化。您必须使用 -&gt; 运算符来访问 Form 对象的成员,例如:

    formCreateAppointment->Show(); 
    

    如果您想使用. 运算符,那么您必须先取消引用指针:

    (*formCreateAppointment).Show(); 
    

    【讨论】:

      【解决方案2】:

      显然您已在其他地方将表单创建为局部变量,这就是您无法从尝试调用它的位置访问它的原因。

      您可以使用三种方法来解决这个问题:

      • 在要显示它的确切位置创建表单。但是,这只适用于您要从一个地方调用表单的情况
      • 将其创建为全局变量。
      • 在堆中创建它,并在主窗体中存储指向它的指针。例如:

        class MyMainForm
        {
        public:
            MyMainForm()
            {
                //create the form in the constructor
                formCreateAppointment = new myOtherForm();
            }
            ~MyMainForm()
            {
                delete formCreateAppointment;
            }
            //code
        private:
            myOtherForm * formCreateAppointment;
        }
        

      【讨论】:

      • 表单不是变量。它是一种具有与之关联的控件和其他对象的表单。它的名字是formCreateAppointment。难道我不只是使用一个简单的.show方法来显示它吗?
      • @user,表单不是变量,它是一个对象。就像任何其他对象一样,它应该首先被创建,然后才能调用它的方法。
      猜你喜欢
      • 1970-01-01
      • 2021-10-08
      • 1970-01-01
      • 1970-01-01
      • 2021-04-05
      • 2021-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多