Form.Show():无法访问已释放的对象



我已经坚持了一段时间了。我无法在单击按钮时打开新表单。如果我在开始表单构造函数中创建并.Show()表单,我将工作。我不明白!:-(

启动表格

public Form1()
    {
        InitializeComponent();
        startmessage();
        br = Logic.loadXML("theshiiiiiittt.xml");
        br2 = br.Clone();
        loadboxes();
        //serializeTest();
        t = new Thread(contactDBUpdate);
        //t.IsBackground = true;
        t.Start();
    }

按钮事件:

private void resultButton_Click(object sender, EventArgs e)
    {
        ResultForm rf = new ResultForm(this);
        rf.Show();
        this.Enabled = false;
    }

希望这就足够了。

就我而言,这是由于我想使我的表单非模态这一事实引起的。所以我把它们从form.ShowDialog(parentForm)改为form.Show().

但是,如果我尝试第二次显示表单,这会导致ObjectDisposedException,因为代码中的某处this.Close();. Form.Close也处置了它。

MSDN:

关闭表单时,在该对象中创建的所有资源都是 关闭并释放表单

我只需要改变

this.Close();

this.Hide();

发现我的代码问题。我又看了一眼堆栈跟踪,发现我有一条消息"图标"。

           this.Icon.Dispose();

Startupform有这条线。

这段代码解决了我的问题:

private void resultButton_Click(object sender, EventArgs e)
{
    ResultForm rf = new ResultForm(this);
    rf.Icon = this.Icon;
    rf.Show();
    this.Enabled = false;
}

感谢您的帮助...

问题是您的表单对象会丢失范围并被释放。如果要使对话框保持打开状态,请使用 Form.ShowDialog() ;

试试这个:

    private void resultButton_Click(object sender, EventArgs e)
    {
        using(ResultForm rf = new ResultForm(this))
        { 
          rf.ShowDialog();
        }
        this.Enabled = false;
    }

Wile 在窗口窗体上实现单例模式 我也得到了这个错误。解决方案是您必须为 中的静态引用分配一个 null 值

protected override void Dispose(bool disposing)

通过放置简单的线条。

obj=null;  //obj is the static reference in the class.

相关内容

最新更新