.NET4.0中的C++;-如何从静态成员函数调用RichTextBox的AppendText

.NET4.0中的C++;-如何从静态成员函数调用RichTextBox的AppendText,.net,winforms,visual-c++,richtextbox,static-functions,.net,Winforms,Visual C++,Richtextbox,Static Functions,不知何故,我的头脑陷入了一个“错误循环”。我不想再把时间浪费在无休止的尝试和错误上,所以我最好在这里问一下: 我有一个Windows窗体(.NET,C++),如下所示。这里的简化版本只有一个RichTextBox、一个静态和一个非静态成员函数。将非静态函数“nonstaticFunc()”中的文本追加到RichTextBox中,效果与预期相同 但是如何从静态成员函数“staticFunc()”执行此操作?我尝试了本论坛中提出的几种方法,讨论如何从静态函数调用非静态函数,但不知何故,我不知道如何做

不知何故,我的头脑陷入了一个“错误循环”。我不想再把时间浪费在无休止的尝试和错误上,所以我最好在这里问一下:

我有一个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" );
    }
}
谢谢你的每一点帮助!非常感谢

您需要找出您感兴趣的文本框。如果有两种可见形式呢?你没有足够的上下文

现在您可以保留一个静态成员来跟踪“一个真正的表单”-或者您可以将文本框或表单作为参数。。。但从根本上说,你需要有这样的背景


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

好的,我不太清楚。我只有一个这种形式的例子——你所谓的“一个真实的形式”。我尝试了您的第二个想法:将表单作为参数传递。但是如何在非静态函数中传递对表单的引用呢?显然,我不能用“这个”。@EliteTUM:你一开始还没有展示过这个叫什么。基本上,你应该拥有所有你需要的上下文——或者如果你真的需要,你可以有一个静态变量,正如我在中间段落中所建议的。在构造函数中,将该静态变量的值设置为“this”,您将能够随时返回到“one-true form”。当然,当你的假设改变时,一切都会破裂……我使用的是System::Timers::Timer^myTimer。按照MSDN上的示例,我将其设置为静态,并在经过的事件上升时调用函数。这就是为什么我尝试在“staticFunc”中这样做的原因。@EliteTUM:事件处理程序可以是静态的,但不一定是静态的。这里最好的解决方案就是使用实例方法作为事件处理程序…:在我尝试引入静态变量(比如)并在构造函数中将其设置为this(
statForm=this
)之前的方法中。使用
statForm->myTextBox->AppenText(L“Test\n”)
访问RichTextBox在非静态函数中运行良好。但是在静态函数中尝试此操作可能会停止函数的执行,甚至导致应用程序崩溃。我将修改代码并尝试替换所有静态函数,希望这会有所帮助。谢谢你的帮助。