Forms C Builder TForm未正确分配或创建其所有控件

Forms C Builder TForm未正确分配或创建其所有控件,forms,c++builder,vcl,Forms,C++builder,Vcl,我想知道如何检查表单上的所有控件是否已创建和初始化 当用户按下更新按钮时,我会显示一个表单。它只有一个TProgressBar控件 此控件的句柄不为空,在随机阶段,它可以或不能设置位置/最大值 当我将TProgressBar->Max值设置为某个整数时,它在之后保持为0 所以问题是: 如何真正创建表单及其上的所有控件(我目前只使用form->Show()方法,我可以检查它调用构造函数) 在主cpp文件中,我还有以下表单创建代码: Application->CreateForm(\uu class

我想知道如何检查表单上的所有控件是否已创建和初始化

当用户按下更新按钮时,我会显示一个表单。它只有一个TProgressBar控件

此控件的句柄不为空,在随机阶段,它可以或不能设置位置/最大值

当我将
TProgressBar->Max
值设置为某个整数时,它在之后保持为0

所以问题是:

  • 如何真正创建表单及其上的所有控件(我目前只使用form->Show()方法,我可以检查它调用构造函数)

    在主cpp文件中,我还有以下表单创建代码:

    Application->CreateForm(\uu classid(TupdateProgramForm),&updateProgramForm)

  • 如何检查窗体上的所有控件是否已创建和绘制(显示和可见)


  • <>在C++ Builder中,在设计时创建的窗体和控件通过生成Delphi代码的自动脚本转换为二进制对象。
    要查看原始的Delphi代码,只需在设计时右键单击表单上的任意位置,然后选择“查看为文本”。这将显示窗体及其控件的Delphi源代码。

    创建窗体和所有子控件后,将调用该窗体的OnCreate事件,您可以在此事件中放置初始化和检查代码,例如:

    void __fastcall TfrmMain::updateProgramFormCreate(TObject *Sender)
    {
       ProgressBar->Max = 100;
       ProgressBar->Value = 20;
    }
    

    函数
    Form->Show()
    不调用构造函数,您的新语句调用构造函数。如果您已将表单设置为自动创建,则它将发生在主函数中,据我所知,在应用程序对象中。谢谢,请给出示例?我只是通过application->createform创建表单,而不是使用new[]操作符。Tommy的评论仍然适用。TeApdio.CuraType()完全创建表单对象及其子控件。对于C++,使用OnCudio/OnDebug通常是不赞成的。构造函数/析构函数更可靠。是的,在C++中不要使用<代码> OnCudio< /COD>和<代码>销毁< /代码>。由于处理<代码> OLDCureAtdie< /Cuff>属性的怪癖/错误,它们有时可以在派生构造函数和派生析构函数之前触发,这在C++中是非法的,并且可能导致崩溃。使用实际的构造函数和析构函数。在派生构造函数运行之前,DFM已经完全加载。或者您可以重写表单的虚拟
    load()
    方法,该方法在DFM加载结束时获取调用。