В моем приложении (основная форма - 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);





Вы уверены, что форма класса TForm1, с которой вы работаете, создается как Form1?
Пытаться
Self.Caption
если это работает, то Form1 не является экземпляром TForm1
Или отладьте его, чтобы увидеть тип
Вы уверены, что «это» на самом деле Form1?
if (this != Form1)
ShowMessage("Whoops. Didn't expect that...");
Как создается ваша форма? Входит ли он в список, если "автосоздание" форм в параметрах проекта, или вы вручную создаете его экземпляр?
Предполагая, что Form1 - ваша основная форма, она обычно создается кодом в вашем основном файле project.cpp в функции WinMain ().
Application->CreateForm(__classid(TForm1), &Form1);
Это должно быть написано для вас автоматически C++ Builder, поэтому будьте осторожны, изменяя его вручную.
Это нигде не заявлено. Вы должны сначала вызвать Form1 = new TForm1 (this); где-то в вашем коде
Я не думаю, что TForm1 знает, что вы звонили
TForm1 * Form1=new TForm1(...);
некоторые были. Это ваша первая попытка в CBuilder? TForm1 * Form1, сгенерированный в верхней части файла, является просто объявлением. вы также должны его создать. Почему вам не нравится первое, работающее решение? Внутри класса нет необходимости использовать Form1. Или, если вам действительно нужно, используйте
this->Caption = "...";
Спасибо всем за ответы. Я нашел ошибку. В файле проекта было дважды создание формы:
Application->CreateForm(__classid(TForm1), &Form1);
Application->CreateForm(__classid(TForm1), &Form1);
Да это! = Form1. Как я могу узнать, где он меняется (объявлен как TForm1 * Form1)?