在VC++2008中,怎样解决两个窗口可以相互引用得的问题
目的:定义了两个窗体,第一个按下按键,打开第二个窗体,第二个窗体按下按键,可以更改label1的text,label1在第一个窗体中。 以下是部分程序:
Form1.h:
#include "frm2.h"
namespace xxx {
...
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{ ... }
protected:
~Form1()
{ ... }
private: System::Windows::Forms::Button^ button1;
protected:
private: System::Windows::Forms::Label^ label1;
frm2^ fs2;
#pragma region Windows Form Designer generated code
void InitializeComponent(void)
{ ... }
#pragma endregion
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
fs2 = gcnew frm2;
fs2->Show();
}
};
}
frm2.h:
#pragma once
...
namespace xxx {
ref class Form1;
public ref class frm2 : public System::Windows::Forms::Form
{
public:
frm2(void)
{ ... }
protected:
~frm2()
{ ... }
public: Form1^ to_f1;
private: System::Windows::Forms::Button^ button1;
protected:
private:
/// <summary>
/// 必需的设计器变量。
/// </summary>
System::ComponentModel::Container ^components;
#pragma region Windows Form Designer generated code
/// <summary>
/// 设计器支持所需的方法 - 不要
/// 使用代码编辑器修改此方法的内容。
/// </summary>
void InitializeComponent(void)
{ ... }
#pragma endregion
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
to_f1->label1->Text = "this is form2 text";
}
};
}
这时会编译出错,产生如下信息:
1>c:\documents and settings\haj.haj-asus\my documents\visual studio 2008\projects\xxx\xxx\frm2.h(89) : error C2027: 使用了未定义类型“xxx::Form1”
1> c:\documents and settings\haj.haj-asus\my documents\visual studio 2008\projects\xxx\xxx\frm2.h(22) : 参见“xxx::Form1”的声明
1>c:\documents and settings\haj.haj-asus\my documents\visual studio 2008\projects\xxx\xxx\frm2.h(89) : error C2227: “->label1”的左边必须指向类/结构/联合/泛型类型
1>c:\documents and settings\haj.haj-asus\my documents\visual studio 2008\projects\xxx\xxx\frm2.h(89) : error C2227: “->Text”的左边必须指向类/结构/联合/泛型类型
1>xxx.cpp
1>c:\documents and settings\haj.haj-asus\my documents\visual studio 2008\projects\xxx\xxx\frm2.h(89) : error C2027: 使用了未定义类型“xxx::Form1”
1> c:\documents and settings\haj.haj-asus\my documents\visual studio 2008\projects\xxx\xxx\frm2.h(22) : 参见“xxx::Form1”的声明
1>c:\documents and settings\haj.haj-asus\my documents\visual studio 2008\projects\xxx\xxx\frm2.h(89) : error C2227: “->label1”的左边必须指向类/结构/联合/泛型类型
1>c:\documents and settings\haj.haj-asus\my documents\visual studio 2008\projects\xxx\xxx\frm2.h(89) : error C2227: “->Text”的左边必须指向类/结构/联合/泛型类型
若屏蔽to_f1->label1->Text = "this is form2 text";这一句,则编译通过。
要怎样才能解决这个问题呢?我的目的即是两个窗体分别可以引用另一窗体的某些控件或属性或者有其它的方法可以实现。
另外,我若在frm2.h中用#include "Form1.h",也会编译出错。