2009-01-09 47 views
1

在我的應用程序(主要形式是TTntForm,C++ Builder的2006年):表未更新

void __fastcall TForm1::Button1Click(TObject *Sender) 
{ 
    Caption=L"1st caption";  // This works. 
    Form1->Caption=L"2nd caption"; // But this doesn't work, 
           // Caption of the form remains "1st caption". 
} 

什麼可能是這個問題的原因是什麼?

編輯: 謝謝大家的回答。我發現了這個錯誤。有兩次表單創建項目文件:

Application->CreateForm(__classid(TForm1), &Form1); 
Application->CreateForm(__classid(TForm1), &Form1); 

回答

1

謝謝大家的答案。我發現了這個錯誤。在項目文件中創建了兩次表單創建:

Application->CreateForm(__classid(TForm1), &Form1); 
Application->CreateForm(__classid(TForm1), &Form1); 
1

你確定你用的實例爲Form1工作TForm1類形式?

2

嘗試

Self.Caption

,如果這個工程然後Form1中不是一個TForm1

或調試的情況下它看類型

4

你確定, 「這」 是實際上是Form1?

if (this != Form1) 
    ShowMessage("Whoops. Didn't expect that..."); 

您的表單是如何創建的?它是否在列表中,如果在項目選項中「autocreate」形成,還是手動創建它的一個實例?

假設Form1是您的主窗體,它通常由您的main project.cpp文件中的函數WinMain()中的代碼創建。

Application->CreateForm(__classid(TForm1), &Form1); 

這應該由C++ Builder自動爲您編寫,因此請小心手動更改它。

+0

是this!= Form1。我怎樣才能找到它改變的地方(它被聲明爲TForm1 * Form1)? – samir105 2009-01-09 11:45:44

0

我不認爲TForm1知道你已經調用

TForm1 * Form1=new TForm1(...); 

somewere。這是你第一次嘗試CBuilder嗎?在文件頂部生成的TForm1 * Form1只是聲明。你還必須創建它。 爲什麼你不喜歡第一個工作解決方案?沒有必要在類中使用Form1。或者如果你真的必須使用

this->Caption="...";