在我的应用程序中(主窗体是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);
有帮助吗?

解决方案 4

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

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

其他提示

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

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

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

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

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

这应该由C ++ Builder自动编写,因此要小心手动更改它。

尝试

Self.Caption

如果这样做,则Form1不是&#180; t TForm1的实例

或调试它以查看类型

您确定要使用的TForm1类表单是否已实例化为Form1?

我不认为TForm1知道你已经打电话了

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

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

this->Caption="...";
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top