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".
}

この問題の原因は何ですか?

編集: ご回答いただきありがとうございます。バグを見つけました。プロジェクト ファイルで 2 回フォームが作成されました:

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

試す

Self.Caption

これが機能する場合、Form1 は TForm1 のインスタンスではありません

または、デバッグしてタイプを確認します

于 2009-01-09T11:37:53.960 に答える
1

回答ありがとうございます。バグを見つけました。プロジェクト ファイルで 2 回フォームが作成されました:

Application->CreateForm(__classid(TForm1), &Form1);
Application->CreateForm(__classid(TForm1), &Form1);
于 2009-01-09T11:53:50.677 に答える
1

作業中の TForm1 クラス フォームが Form1 としてインスタンス化されていますか?

于 2009-01-09T11:35:27.523 に答える
0

TForm1 は、あなたが呼び出したことを認識していないと思います

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

何とか。これは CBuilder での最初の試みですか? TForm1 * ファイルの先頭に生成されている Form1 は単なる宣言です。また、それを作成する必要があります。最初の有効なソリューションが気に入らないのはなぜですか? クラス内で Form1 を使用する必要はありません。または、本当に使用する必要がある場合

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