的main.cpp
#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;
};
Form1.h
#include "myclass.h"
public ref class Form1 : public System::Windows::Forms::Form
{
...
};
myclass.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。
答案 0 :(得分:1)
我怎么能得到它?
您需要在main.cpp中#include myclass.h
才能在Form1
内使用它。
答案 1 :(得分:0)
我无法通过课程&#34; MyClass&#34;到实例&#34; MainForm&#34;在main.cpp中。我怎么能得到它?
MainForm
是方法main
中的局部变量。该方法之外的任何代码都无法读取该局部变量。
您可以将MainForm
局部变量中包含的实例传递给其他代码,以便其他代码可以访问它,但是没有足够的代码来帮助您。
您在MainForm
中尝试访问MyClass::addBox
的方式就像一个全局变量。这是你想要做的吗?通常要避免全局变量,但如果这是你想要的,请在main.cpp
和myclass.cpp
都可以看到的头文件中声明它,并像你一样初始化它已在main()
中完成。
答案 2 :(得分: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
};