在我的应用程序中(主窗体是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".
}
这个问题的原因可能是什么?
编辑: 谢谢大家的答案。我发现了这个bug。项目文件中有两次表单创建:
Application->CreateForm(__classid(TForm1), &Form1);
Application->CreateForm(__classid(TForm1), &Form1);
答案 0 :(得分:4)
你确定“这个”实际上是Form1吗?
if (this != Form1)
ShowMessage("Whoops. Didn't expect that...");
您的表单是如何创建的?如果在项目选项中“autocreate”表单,或者您是否手动创建它的实例,它是否在列表中?
假设Form1是您的主要表单,它通常由主project.cpp文件中的代码创建,函数WinMain()。
Application->CreateForm(__classid(TForm1), &Form1);
这应该由C ++ Builder自动编写,因此要小心手动更改它。
答案 1 :(得分:2)
尝试
Self.Caption
如果这样做,则Form1不是TForm1的实例
或调试它以查看类型
答案 2 :(得分:1)
您确定要使用的TForm1类表单是否已实例化为Form1?
答案 3 :(得分:1)
谢谢大家的回答。我发现了这个bug。项目文件中有两次表单创建:
Application->CreateForm(__classid(TForm1), &Form1);
Application->CreateForm(__classid(TForm1), &Form1);
答案 4 :(得分:0)
我不认为TForm1知道你已经打电话了
TForm1 * Form1=new TForm1(...);
somewere。这是你在CBuilder的第一次尝试吗?你看到在文件顶部生成的TForm1 * Form1只是声明。你还必须创建它。 你为什么不喜欢第一个有效的解决方案?没有必要在类中使用Form1。或者,如果你真的必须使用
this->Caption="...";