2010-05-29 32 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