类到类的访问,从ref类到gui类

时间:2009-10-09 12:42:09

标签: .net c++ class

我如何从另一个简单的类

访问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

中添加了以下内容
  1. #include "b.h"
  2. using namespace tmp_beginInvoke_c_B;
  3. b^ obj = gcnew b(); // this line in constructure
  4. 引发构建错误: - (

    我的目标: -        我想将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 
    

1 个答案:

答案 0 :(得分:0)

在我不明白这个问题之前,可能是所有人。

但我建议将声明与实施分开。这两个类互相引用,因此您可能需要对其中一个使用前向声明,例如: Form1.h中的ref class b;。但是,在知道真实声明之前,您无法访问此类的任何成员,包括构造函数。