我的思绪不知何故陷入了“错误循环”。我不想再浪费时间和无休止的试错,所以我最好在这里问:
我有一个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" );
}
}
感谢您的每一点帮助!赞赏很多!
答案 0 :(得分:1)
您需要找出您感兴趣的哪个文本框。如果有两个可见的表单怎么办?你没有足够的背景。
现在你可以保持一个静态成员来跟踪“一个真实的形式” - 或者你可以把文本框或表单作为参数......但从根本上你需要有这个上下文不知何故
为什么要从staticFunc
执行此操作?为什么调用者不能在适当的表单上调用该方法?一旦你理解了问题 - 为什么它不起作用 - 你应该能够考虑最合适的变化。我们无法告诉你,因为我们没有足够的信息。