0

我创建了这个自定义测试类:

#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。sayHello()反过来,在 Form1 中单击按钮时调用该函数是没有问题的。

我注意到我的main()函数(由 IDE 自动生成)包含这一行: Application::Run(gcnew Form1());

因此,在我看来,尽管 Form1.h 确实存在(当然),但在编译器启动时尚未创建 Form1。

如何从我的自定义类中访问 Form1 元素?例如更改 Form1.Text?

4

2 回答 2

1

创建一个全局变量来保存您的表单对象并更改生成的 IDE 以显示这样的表单

Form1 frm=gvnew Form1();
Application::Run(frm);

现在 frm 是 form1 类的引用,您可以访问它来访问 Form1 类成员。如果要在 Main 函数之外访问 frm 对象,请声明一个全局变量并访问它。

于 2012-05-25T04:33:36.047 回答
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";
}

PS我正在使用VS 2013。

于 2015-03-12T13:56:42.107 回答