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 に答える