表单不会更新

时间:2009-01-09 11:26:48

标签: delphi c++builder vcl

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

5 个答案:

答案 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="...";