关闭表单时System.ObjectDisposedException

时间:2016-03-24 19:25:18

标签: c# winforms

我有一个Windows应用程序,它有一个主窗体(主屏幕)和许多子窗体。

当子窗体关闭并从主窗体再次回调时,会发生System.ObjectDisposedException异常。

下面列出了我的屏幕代码:

调用子表单的主屏幕代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Application
{
    public partial class Home : Form
    {

        private void Businesslogic_button_Click(object sender, EventArgs e)
        {
            BusinessRules.Show();
        }

    }
}

用于处理对象的Subform Designer.CS代码:

protected override void Dispose(bool disposing)
{
    if (disposing && (components != null))
    {
        components.Dispose();
    }

    base.Dispose(disposing);
}

表单结束事件的子表单.CS代码:

bool formClosing false; 
private void BusinessRules_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (formClosing) return;
        e.Cancel = true;
        Timer Tmr = new Timer();
        Tmr.Tick += Tmr_Tick;
        Tmr.Start();
        formClosing = true;
    }

    void Tmr_Tick(object sender, EventArgs e)
    {
        ((Timer)sender).Stop();
        this.Close();
    }

2 个答案:

答案 0 :(得分:2)

如果需要存储表单的状态,只需调用Hide()方法并设置e.Cancel = true。然后再次调用表单变量上的Show()以重新打开它。

如果您不想保留该州,只需关闭该表单即可。并从主页面打开表单的新实例。

答案 1 :(得分:1)

在Subform.CS中尝试:

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