2009-01-09 51 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="...";