2010-05-29 53 views
0

我想知道如何检查窗体上的所有控件是否已创建并初始化。C Builder Builder未正确分配或创建其所有控件

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

该控件的句柄不为NULL,在随机阶段它可以或不可以设置Position/Max值。

当我将TProgressBar->Max的值设置为某个整数后,它仍然为0。

所以,问题是:

  1. 如何真正的创造形式(上的所有控件我目前使用的只是形式 - > Show()方法,这是我可以检查调用构造函数)

    而且我有以下主CPP文件形式创建代码:

    Application->CreateForm(__classid(TupdateProgramForm), &updateProgramForm);

  2. 如何检查所创建和画的形式上的所有控件(显示和可见)

+1

功能'形式 - >展( )'不调用构造函数,你的新语句调用构造函数。如果您已将窗体设置为自动创建,那么就会在主函数中发生,就像我在应用程序对象中记得的一样。 – 2010-05-30 19:54:48

+0

谢谢, 请你举个例子吗?我只是通过application-> createform创建表单,而不是使用new []运算符。 – ergey 2010-05-31 04:28:14

+0

汤米的评论仍然适用。 TApplication.CreateForm()完全创建Form对象及其子控件。使用OnCreate/OnDestroy的 – 2010-06-02 19:10:20

回答

0

在C++生成器的形式,并且在设计时所创建的控制是通过产生自动的脚本翻译成二进制对象Delphi代码。

要查看源代码的Delphi代码,只需在设计时右键单击窗体上的任意位置,然后选择“以文本形式查看”即可。这将显示窗体的Delphi源代码及其控件。

0

形式以及所有子控件之后创建,调用该窗体的OnCreate事件,你可以把你的初始化和校验码在这种情况下,例如:

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

通常对C++不满意。构造函数/析构函数更可靠。 – 2012-05-10 15:17:15

+1

是的,不要在C++中使用'OnCreate'和'OnDestroy'。由于处理'OldCreateOrder'属性时的怪癖/错误,它们有时可以分别在派生构造函数之前和派生析构函数之后被触发,这在C++中是非法的,并且可能导致崩溃。改为使用实际的构造函数和析构函数。在派生构造函数运行之前,DFM已经完全加载。或者你可以重写表单的虚拟'Loaded()'方法,该方法在DFM加载结束时获取调用。 – 2012-05-10 17:57:44