我创建了这个自定义测试类:
#include "Form1.h"
class Demo
{
public:
void sayHello()
{
System::Windows::Forms::Form1->Text = "Hello Form!"; // does not work
Form1->Text = "Hello Form!"; // does not work
Form1.Text = "Hello Form!"; // does not work
}
};
我基本上得到了这个编译错误:
c:\users\pieter kubben\documents\visual studio 2010\projects\testclassref\testclassref\Demo.h(8): error C2065: 'Form1' : undeclared identifier
c:\users\pieter kubben\documents\visual studio 2010\projects\testclassref\testclassref\Demo.h(8): error C2227: left of '->Text' must point to class/struct/union/generic type
所以我猜它没有看到Form1。反过来说,单击Form1中的按钮时调用sayHello()
函数也没问题。
我注意到我的main()
函数(由IDE自动生成)包含以下行:
Application::Run(gcnew Form1());
因此,我认为在编译器启动时尚未创建Form1,尽管Form1.h确实存在(当然)。
如何从自定义类中访问Form1元素?例如。改变Form1.Text?
答案 0 :(得分:1)
创建一个全局变量来保存表单对象并更改生成的IDE以显示表单 像这样
Form1 frm=gvnew Form1();
Application::Run(frm);
现在frm是form1类的引用,你可以访问它来访问Form1类成员。如果要访问Main函数之外的frm对象,则声明一个全局变量并访问它。
答案 1 :(得分:0)
error C3145: 'form' : global or static variable may not have managed type
当您尝试制作Form1 ^frm;
或Form1 ^frm = gcnew Form1();
所以我为它创建了容器,这对我来说很好。 有一个例子
ref class FormContainer{
public:
static MyForm ^form;
};
void Main(array<String^>^ args)
{
FormContainer::form = gcnew MyForm();
Application::Run(FormContainer::form);
}
现在你可以访问公共成员了,所以一定要做出你需要的getter和setter。
void SayHello(){
FormContainer::form->label1->Text = "Hello";
}
P.S。我正在使用VS 2013.