第二次显示表单时如何摆脱System.ObjectDisposedException?

时间:2019-05-13 18:51:01

标签: c# windows

我有一张带有完整图片的表格,可以帮助玩家查看游戏中拼图的位置。当我第二次显示它时,关闭它后,将抛出System.ObjectDisposedException。

当FormClosed事件发生时,我尝试使用Hide()方法,但是它没有帮助。另外,我从控件中删除了pictureBox,因为我认为这是导致此异常的原因,但也无济于事。

Original_px OrPix = new Original_px();

        private void showFullPictureToolStripMenuItem_Click(object sender, EventArgs e)
        {
            OrPix.Show();
        }

我希望此表单可以正常运行

1 个答案:

答案 0 :(得分:1)

如果您关闭窗体,通过关闭右上角的图标或通过调用窗体Close()方法的代码,则变量 OrPix 将引用已关闭且已处置的对象。 您必须重新使用 new Original_px()​​; 来重新初始化变量。

您需要知道何时关闭表单,并且可以接收到处理FormClosed事件的信息,并将该变量设置为null。 因此,当您需要再次(或第一次)显示它时,应检查该变量是否为null并重新初始化

Original_px OrPix = null;

private void showFullPictureToolStripMenuItem_Click(object sender, EventArgs e)
{
    if(OrPix == null)
    {
       OrPix = new Original_px();
       OrPix.FormClosed += PixClosed;
    }
    OrPix.Show();
}

private void PixClosed(object sender, FormClosedEventArgs e)
{
    OrPix = null;
}