如何防止表单对象在关闭时处理?

时间:2011-05-19 14:46:04

标签: c# winforms dispose formclosing

我使用的是MDIParent表格。当我关闭它的孩子时,孩子的对象处理。有没有办法将子可见性设置为false而不是处理?

5 个答案:

答案 0 :(得分:35)

默认情况下,当您关闭表单时,它将被处理掉。您必须覆盖Closing事件以阻止它,例如:

// 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.
}

答案 1 :(得分:3)

您可以取消关闭事件并隐藏。

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        e.Cancel = true;
        this.Hide();
    }

答案 2 :(得分:2)

是。您可以调用表单的“隐藏”方法。

你也可以覆盖OnClosed而不是调用它的基础实现;但是,当你想要处理表格时,这可能会妨碍你。

答案 3 :(得分:0)

当然,您可以取消关闭并隐藏它。这似乎不是一件好事,但你绝对可以。

请参阅 Form.FormClosing Event (MSDN)。

答案 4 :(得分:0)

    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;
}