我如何从另一个简单的类
访问Form
类的控件
让我们说
我创建了新的clr(c ++ .net 2008)windows应用程序,&在其上添加一个lable1,(Form1.cpp& Form1.h默认创建namaspace tmp_beginInvoke_c
)
然后我创建了一个新的b.h文件&添加一个简单的引用类b。如下面的代码,
#include "Form1.h" namespace tmp_beginInvoke_c_B { //using namespace tmp_beginInvoke_c; //{error C2871: 'tmp_beginInvoke_c' : a namespace with this name does not exist,} namespace of Form1 in my project using namespace System; using namespace System::ComponentModel; public ref class b { public: b(void) { } b(Form1^% guiForm) { //guiForm->ChangeLabel(); //this->frm = gcnew Form1(); this->frm = guiForm; this->frm->ChangeLabel(); } int i; Form1 ^frm; }; }
我还在Form1.h
中添加了以下内容#include "b.h"
using namespace tmp_beginInvoke_c_B;
b^ obj = gcnew b(); // this line in constructure
。引发构建错误: - (
我的目标: -
我想将Form1
创建的实例的引用传递给所有b
类对象,
b
类对象将在事件库中随机调用Form1
类的函数。
如果我说矿石有问题b类对象会在beginInvoke
上调用Form1
控件。
Thread^ t = gcnew Thread(gcnew ThreadStart((frm,&tmp_beginInvoke_c::Form1::ChangeLabel)); //which will call beginInvike of control
答案 0 :(得分:0)
在我不明白这个问题之前,可能是所有人。
但我建议将声明与实施分开。这两个类互相引用,因此您可能需要对其中一个使用前向声明,例如: Form1.h中的ref class b;
。但是,在知道真实声明之前,您无法访问此类的任何成员,包括构造函数。