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);
4

5 回答 5

4

你确定“这个”实际上是Form1吗?

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

您的表单是如何创建的?如果项目选项中的“自动创建”形式出现在列表中,还是您手动创建它的实例?

假设 Form1 是您的主窗体,它通常由您的主 project.cpp 文件中的代码在函数 WinMain() 中创建。

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

这应该由 C++Builder 自动为您编写,所以要小心手动更改它。

于 2009-01-09T11:38:22.290 回答
2

尝试

自我说明

如果这可行,那么 Form1 不是 TForm1 的实例

或调试它以查看类型

于 2009-01-09T11:37:53.960 回答
1

您确定您正在使用的 TForm1 类表单被实例化为 Form1 吗?

于 2009-01-09T11:35:27.523 回答
1

谢谢大家的回答。我发现了这个错误。项目文件中有两次表单创建:

Application->CreateForm(__classid(TForm1), &Form1);
Application->CreateForm(__classid(TForm1), &Form1);
于 2009-01-09T11:53:50.677 回答
0

我认为 TForm1 不知道您已致电

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

有些人。这是您在 CBuilder 中的第一次尝试吗?您在文件顶部看到的 TForm1 * Form1 只是声明。您还必须创建它。您为什么不喜欢第一个有效的解决方案?无需在类中使用 Form1。或者如果你真的必须使用

this->Caption="...";
于 2009-01-09T11:51:02.523 回答