How do I prevent a form object from disposing on close?

后端 未结 5 555
南方客
南方客 2020-12-06 10:27

I am using an MDIParent Form. When I close its child, the object of the child disposes. Is there a way to set child visibility to false instead of disposing?

相关标签:
5条回答
  • 2020-12-06 10:41

    By default, when you close a form, it will be disposed. You have to override the Closing event to prevent it, for example:

    // Use this event handler for the FormClosing event.
    private void MyForm_FormClosing(object sender, FormClosingEventArgs e)
    {
      this.Hide();
      e.Cancel = true; // this cancels the close event.
    }
    
    0 讨论(0)
  • 2020-12-06 10:43
        void SaveInfo()
    {
    blnCanCloseForm = false;
    Vosol[] vs = getAdd2DBVosol();
    if (DGError.RowCount > 0)
    return;
    
    Thread myThread = new Thread(() =>
    {
    this.Invoke((MethodInvoker)delegate {
        picLoad.Visible = true;
        lblProcces.Text = "Saving ...";
    });
    int intError = setAdd2DBVsosol(vs);
    Action action = (() =>
    {
        if (intError > 0)
        {
            objVosolError = objVosolError.Where(c => c != null).ToArray();
            DGError.DataSource = objVosolError;// dtErrorDup.DefaultView;
            DGError.Refresh();
            DGError.Show();
            lblMSG.Text = "Check Errors...";
        }
        else
        {
            MessageBox.Show("Saved All Records...");
            blnCanCloseForm = true;
            this.DialogResult = DialogResult.OK;
            this.Close();
        }
    
    });
    this.Invoke((MethodInvoker)delegate {
        picLoad.Visible = false;
        lblProcces.Text = "";
    });
    this.BeginInvoke(action);
    });
    myThread.Start();
    }
    
    void frmExcellImportInfo_FormClosing(object s, FormClosingEventArgs e)
    {
        if (!blnCanCloseForm)
            e.Cancel = true;
    }
    
    0 讨论(0)
  • 2020-12-06 10:46

    You can cancel the close event and hide instead.

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            e.Cancel = true;
            this.Hide();
        }
    
    0 讨论(0)
  • 2020-12-06 10:52

    Sure, you can cancel the close and hide it. It doesn't seem like a good thing to do, but you definitely can.

    See Form.FormClosing Event (MSDN).

    0 讨论(0)
  • 2020-12-06 11:03

    Yes. You can call the form's "Hide" method.

    You can also override OnClosed and not call its base implementation; HOWEVER, when you DO want to dispose of the form, this may get in your way.

    0 讨论(0)
提交回复
热议问题