0

私の心はどういうわけか「エラーのループ」で立ち往生しています。終わりのない試行錯誤でこれ以上時間を無駄にしたくないので、ここで質問します。

次のような Windows フォーム (.NET、C++) があります。ここの簡略化されたバージョンには、RichTextBox、静的および非静的メンバー関数のみがあります。非静的関数 " nonstaticFunc() "から RichTextBox にテキストを追加すると、期待どおりに機能します。

しかし、静的メンバー関数 " staticFunc() "からこれを行うにはどうすればよいでしょうか? 静的関数から非静的関数を呼び出す方法について、このフォーラムで提案されているいくつかのアプローチを試しましたが、どういうわけかこれを行う方法がわかりませんでした。

public ref class Form1 : public System::Windows::Forms::Form
    {

    public:
        Form1()
        {
            InitializeComponent();
        }

    protected:
        ~Form1()
        {
            if (components)
            {
                delete components;
            }
        }

    protected: 

    private:
        System::ComponentModel::Container ^components;

    private: System::Windows::Forms::RichTextBox^  myTextBox;




    System::VoidInitializeComponent( System::Void )
    {
        System::ComponentModel::ComponentResourceManager^  resources = (gcnew System::ComponentModel::ComponentResourceManager(Form1::typeid));
        this->myTextBox = (gcnew System::Windows::Forms::RichTextBox());
    }

    public: System::Void nonstaticFunc( System::Void )
    {
        this->myTextBox->AppendText( L"Append this...\n" );
    }

    public: static System::Void staticFunc( System::Void )
    {
        // How do I AppendText here??
        // Not working: this->myTextBox->AppendText( L"Append this...\n" );
    }
}

少しずつ助けてくれてありがとう!大好評!

4

1 に答える 1

1

関心のあるテキスト ボックスを特定する必要があります。表示されているフォームが 2 つある場合はどうでしょうか。十分なコンテキストがありません。

これで、「唯一の真のフォーム」を追跡するために静的メンバーを保持できます-または、テキストボックスまたはフォームをパラメーターとして取得できます...しかし、基本的には、そのコンテキストを何とか持つ必要があります

そもそもなんでこんなことしたいのstaticFunc?呼び出し元が適切なフォームでメソッドを呼び出せないのはなぜですか? 問題を理解したら、なぜそれがうまくいかないのか、最も適切な変更について考えることができるはずです。十分な情報がないため、正確には言えません。

于 2011-09-23T11:13:50.413 に答える