在不创建 gcnew 表单的情况下从父表单转到子表单

Going from a parent form to a child form without creating a gcnew form

您好,我有一个主窗体 (Form1) 和一个子窗体 (Form5)。如果我第一次点击一个按钮,我希望它打开一个新表单。但是,如果第二次单击它,我希望它打开我第一次打开的表单,保存我将填写的表单数据(文本框等)。这就是我所拥有的: .cpp 文件:

System::Void Form1::button5_Click(System::Object^  sender, System::EventArgs^  e){
formclick++;

if (formclick == 1)

{
      Form5 ^dos1 = gcnew Form5(this, MyArray, MyArray1);

    dos1->Show();
}

if (formclick==2)
{


            otherform->Show();
}

Form1.h 文件:

>   Form1(System::Windows::Forms::Form ^ Form5)
>         {
>           
>           
>               otherform = Form5;
>             InitializeComponent();
>         }         public: System::Windows::Forms::Form ^ otherform;

但是我得到了错误: System.Windows.Forms.dll

中发生类型为 'System.NullReferenceException' 的未处理异常

附加信息:未将对象引用设置为对象的实例。

TIA

您将新创建的表单存储在 button5_click 函数的局部范围内(在 dos1 变量中),这意味着当函数存在时它可以自由地从内存中删除。

您给出的代码摘录有点乱,但是您可以将点击功能更改为以下内容:

 System::Void Form1::button5_Click(System::Object^  sender, System::EventArgs^  e){
   if (!otherForm) 
     otherForm = gcnew Form5(this, MyArray, MyArray1);
   else
     otherform->Show();
 }

代码未测试,但主要是您需要将新创建的表单存储在 class 成员中,而不仅仅是在本地点击功能!

问候 甚至