2

主文件

 #include "stdafx.h"
 #include <iostream>
 #include "Form1.h"
 #include "myclass.h"
using namespace Akva;

[STAThreadAttribute]
int main(array<System::String ^> ^args)
{

Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false); 
Form1^ MainForm = gcnew Form1();
Application::Run(MainForm);
return 0;
};

表格1.h

#include "myclass.h"
public ref class Form1 : public System::Windows::Forms::Form
{
        ...
    };

我的班级.h

#include "Form1.h"
class MyClass
{
    public: void addBox();
};

void MyClass::addBox()
{
    PaintBox^ pb = cgnew PaintBox();
    MainForm->Controls->Add(pb);  //here
};

我无法从类“MyClass”访问 main.cpp 中的实例“MainForm”。我怎样才能得到它?

UPD:myclass.h 中的代码包括在我创建实例 MainForm 之前,而 Form1 的实例在 myclass.h 中不可见。

 #include "stdafx.h"
 #include <iostream>
 #include "Form1.h"
 #include "myclass.h"
using namespace Akva;

[STAThreadAttribute]
int main(array<System::String ^> ^args)
{

Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false); 
Application::Run(gcnew Form1()); //here
return 0;
};

另一个问题:如何访问 Form1 的元素和实例?

我想从“MyClass”创建 PictureBox。

4

3 回答 3

1

我怎样才能得到它?

您需要#include myclass.h在 main.cpp 中才能在Form1.

于 2013-06-05T19:09:20.577 回答
0

我无法从类“MyClass”访问 main.cpp 中的实例“MainForm”。我怎样才能得到它?

MainForm是方法内部的一个局部变量main。该方法之外的任何代码都无法读取该局部变量。

您可以将包含在MainForm局部变量中的实例传递给其他代码,以便其他代码可以访问它,但是没有足够的代码来帮助您。

您尝试访问MainFormMyClass::addBox方式就像一个全局变量。那是你想要做的吗?通常要避免使用全局变量,但如果这是您想要的,请在两者都可以看到的头文件中声明它main.cppmyclass.cpp并像在main().

于 2013-06-05T21:07:11.547 回答
0

您至少有两种解决方案:

  • 将表单实例传递给MyClass 构造函数

    #include "Form1.h"
    
    class MyClass
    {
        private: MainForm^ mainForm;
        public: MyClass(MainForm^ mainForm);
        public: void addBox();
    };
    
    void MyClass::MyClass(MainForm^ mainForm)
    {
        this->mainForm = mainForm;
    }
    
    void MyClass::addBox()
    {
        PaintBox^ pb = cgnew PaintBox();
        mainForm->Controls->Add(pb);  //here
    };
    
  • 将表单实例传递给addBox方法:

    #include "Form1.h"
    
    class MyClass
    {
        public: void addBox(MainForm^ mainForm);
    };
    
    void MyClass::MyClass(MainForm^ mainForm)
    {
        this->mainForm = mainForm;
    }
    
    void MyClass::addBox(MainForm^ mainForm)
    {
        PaintBox^ pb = cgnew PaintBox();
        mainForm->Controls->Add(pb);  //here
    };
    
于 2013-06-06T12:35:07.977 回答