通过另一个表单按钮的点击事件更新表单中状态栏的文本 属性
update statusbar's text property in the form by another form's button's click event
您好,我无法通过单击另一个表单的按钮来更新表单中状态栏的文本 属性。它已成功编译并能够 运行 直到我单击 我得到的错误是 "Access violation at address: XXXXXXXX....."
使用 Win 7 中的 C++ Builder XE7。
表格 1:
#include "Main.h"
#include "minor.h"
....
TForm1 *Form1;
TForm2 *Form2;
....
表格 2:
#include "minor.h"
#include "Main.h"
....
TForm2 *Form2;
TForm1 *Form1;
....
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
TButton* btnTest2 = new TButton(this);
btnTest2->Height = 50;
btnTest2->Width = 200;
btnTest2->Left = 220;
btnTest2->Top = 50;
btnTest2->Caption = "Updated Statusbar Button";
btnTest2->Visible = true;
btnTest2->Enabled = true;
btnTest2->Parent = this;
btnTest2->OnClick = &ButtonClicked2; // Create your own event here manually!
}
//---------------------------------------------------------------------------
void __fastcall TForm2::ButtonClicked2(TObject *Sender)
{
Form1->statusbarMain->Panels->Items[0]->Text = "Hello2"; // PROBLEM!!!
}
知道为什么会出现问题吗?
请指教.. 谢谢
您的 Form2 单元正在声明其自己的 Form1
变量,该变量与 Form1 单元中的 Form1
变量分开,并且第二个变量未被初始化为任何有意义的值。这就是您的代码崩溃的原因 - 您正在访问错误的 Form1
变量。
您需要删除 Form2 单元中的 Form1
变量,取而代之的是 #include
Form1 的头文件(它应该已经有 Form1 的 [=14= 的 extern
声明] 多变的)。这也是必要的,因为 Form2 需要 TForm1
class 的完整声明才能访问其成员,例如 statusbarMain
.
与您在 Form1 单元中声明的 Form2
变量相同。您需要删除它并改用 #include "Form2.hpp"
(应该有合适的 extern
声明)。
Form1.h:
...
class TForm1 : public TForm
{
__published:
TStatusBar *statusbarMain;
...
};
extern TForm1 *Form1;
...
Form1.cpp:
#include "Main.h"
#include "minor.h"
#include "Form2.hpp" // <-- add this
....
TForm1 *Form1;
//TForm2 *Form2; // <-- get rid of this
....
Form2.h:
...
class TForm2 : public TForm
{
...
};
extern TForm2 *Form2;
...
Form2.cpp:
#include "minor.h"
#include "Main.h"
#include "Form1.hpp" // <-- add this
....
TForm2 *Form2;
//TForm1 *Form1; // <-- get rid of this
...
void __fastcall TForm2::ButtonClicked2(TObject *Sender)
{
Form1->statusbarMain->Panels->Items[0]->Text = "Hello2";
}
您好,我无法通过单击另一个表单的按钮来更新表单中状态栏的文本 属性。它已成功编译并能够 运行 直到我单击 我得到的错误是 "Access violation at address: XXXXXXXX....."
使用 Win 7 中的 C++ Builder XE7。
表格 1:
#include "Main.h"
#include "minor.h"
....
TForm1 *Form1;
TForm2 *Form2;
....
表格 2:
#include "minor.h"
#include "Main.h"
....
TForm2 *Form2;
TForm1 *Form1;
....
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
TButton* btnTest2 = new TButton(this);
btnTest2->Height = 50;
btnTest2->Width = 200;
btnTest2->Left = 220;
btnTest2->Top = 50;
btnTest2->Caption = "Updated Statusbar Button";
btnTest2->Visible = true;
btnTest2->Enabled = true;
btnTest2->Parent = this;
btnTest2->OnClick = &ButtonClicked2; // Create your own event here manually!
}
//---------------------------------------------------------------------------
void __fastcall TForm2::ButtonClicked2(TObject *Sender)
{
Form1->statusbarMain->Panels->Items[0]->Text = "Hello2"; // PROBLEM!!!
}
知道为什么会出现问题吗? 请指教.. 谢谢
您的 Form2 单元正在声明其自己的 Form1
变量,该变量与 Form1 单元中的 Form1
变量分开,并且第二个变量未被初始化为任何有意义的值。这就是您的代码崩溃的原因 - 您正在访问错误的 Form1
变量。
您需要删除 Form2 单元中的 Form1
变量,取而代之的是 #include
Form1 的头文件(它应该已经有 Form1 的 [=14= 的 extern
声明] 多变的)。这也是必要的,因为 Form2 需要 TForm1
class 的完整声明才能访问其成员,例如 statusbarMain
.
与您在 Form1 单元中声明的 Form2
变量相同。您需要删除它并改用 #include "Form2.hpp"
(应该有合适的 extern
声明)。
Form1.h:
...
class TForm1 : public TForm
{
__published:
TStatusBar *statusbarMain;
...
};
extern TForm1 *Form1;
...
Form1.cpp:
#include "Main.h"
#include "minor.h"
#include "Form2.hpp" // <-- add this
....
TForm1 *Form1;
//TForm2 *Form2; // <-- get rid of this
....
Form2.h:
...
class TForm2 : public TForm
{
...
};
extern TForm2 *Form2;
...
Form2.cpp:
#include "minor.h"
#include "Main.h"
#include "Form1.hpp" // <-- add this
....
TForm2 *Form2;
//TForm1 *Form1; // <-- get rid of this
...
void __fastcall TForm2::ButtonClicked2(TObject *Sender)
{
Form1->statusbarMain->Panels->Items[0]->Text = "Hello2";
}