C ++中的.NET 4.0 - 如何从静态成员函数中为RichTextBox调用AppendText

时间:2011-09-23 11:10:55

标签: .net winforms visual-c++ richtextbox static-functions

我的思绪不知何故陷入了“错误循环”。我不想再浪费时间和无休止的试错,所以我最好在这里问:

我有一个Windows-Form(.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" );
    }
}

感谢您的每一点帮助!赞赏很多!

1 个答案:

答案 0 :(得分:1)

您需要找出您感兴趣的哪个文本框。如果有两个可见的表单怎么办?你没有足够的背景。

现在你可以保持一个静态成员来跟踪“一个真实的形式” - 或者你可以把文本框或表单作为参数......但从根本上你需要有这个上下文不知何故

为什么要从staticFunc执行此操作?为什么调用者不能在适当的表单上调用该方法?一旦你理解了问题 - 为什么它不起作用 - 你应该能够考虑最合适的变化。我们无法告诉你,因为我们没有足够的信息。