首页 > 解决方案 > 停留在对 Windows 窗体 C++ 的循环依赖上

问题描述

我认为问题在于我的代码陷入了循环依赖。我正在尝试将价值从一种形式发送到另一种形式。在 form1 中我声明了 Form2 并打开它,因此我无法从 Form2 中声明 Form1,我现在不知道该怎么做。

代码:

private: System::Void paieškaToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e)
{
    PaieskaGUI^ paieska = gcnew PaieskaGUI(); //declaring the other form
    paieska->Show(); //opening it when the button is pressed
}

所以上面是form1,当我按下按钮并打开form2时。在下面的代码中,当我按下按钮时显示 form2,它声明 form1 并将值发送给它

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) 
{
    String^ mas = textBox1->Text;
    Pagrindinis^ pgrr = gcnew Pagrindinis();
    pgrr->SomeText = mas;
    this->Hide();
}

我是编程新手。

标签: c++-clicircular-dependency

解决方案


如果我理解正确,您希望将值传递回原始表单,而不是创建一个新实例。如果是这种情况,可以考虑在显示之前在 form2 上设置Parent,以便您可以从 Parent 属性中获取第一个表单,然后在将其转换为适当的类型后在其上设置相关值。

在代码中,您还隐藏了单击按钮后的第二个表单,您是否打算让表单只是一个对话框以获取一些值并将其返回给父级?如果是这样,也许您想考虑使用 ShowDialog 代替它会阻止与父级交互直到返回,然后您可以使用调用方法中的第二个表单的实例来访问该表单上的属性。MSDN 上Form.ShowDialog方法的示例显示了如何从第二个表单获取值到第一个表单。


推荐阅读