【问题标题】:Form doesn't get updated表格没有更新
【发布时间】:2009-01-09 11:26:48
【问题描述】:

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

【问题讨论】:

    标签: delphi c++builder vcl


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 是的,这个!= Form1。我怎样才能找到它在哪里改变(它被声明为 TForm1 *Form1)?
    • 它没有被声明。您必须首先调用 Form1= new TForm1(this);有些在你的代码中
    【解决方案2】:

    试试

    Self.Caption

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

    或者调试一下看看类型

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

          我认为 TForm1 不知道你打过电话

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

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

          this->Caption="...";
          

          【讨论】:

            猜你喜欢
            • 2021-09-03
            • 2013-02-01
            • 2017-03-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多