Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Form.Show():无法访问已释放的对象_C#_Winforms - Fatal编程技术网

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

C# Form.Show():无法访问已释放的对象,c#,winforms,C#,Winforms,我已经被这个问题困扰了一段时间了。我无法在单击按钮时打开新表单。 如果我在start form构造函数中创建并.Show()表单,我将工作。我不明白-( 启动形式 public Form1() { InitializeComponent(); startmessage(); br = Logic.loadXML("theshiiiiiittt.xml"); br2 = br.Clone(); loadboxe

我已经被这个问题困扰了一段时间了。我无法在单击按钮时打开新表单。 如果我在start form构造函数中创建并
.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()

试试这个:

    private void resultButton_Click(object sender, EventArgs e)
    {
        using(ResultForm rf = new ResultForm(this))
        { 
          rf.ShowDialog();
        }
        this.Enabled = false;
    }
发现我的代码有问题。 我又看了一眼堆栈跟踪,发现一条消息“Icon”

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(parentForm)
更改为
form.Show()

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

MSDN:

关闭窗体时,对象中创建的所有资源都将被关闭 关闭并窗体被释放

我只是需要改变一下

this.Close();


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

protected override void Dispose(bool disposing)
通过放简单的线

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

click事件触发是否正确?您是否尝试在事件中放置MessageBox.Show(“测试”)之类的内容?您是否可以发布堆栈跟踪?我尝试使用MessageBox进行放置,但我触发得很好。按钮不是问题:(OP每次都会创建
ResultForm
的新实例。这不能是异常原因。在多次显示和隐藏的情况下,它不会消耗更多内存吗?为什么?隐藏只会使它不可见和显示可见。在VB.NET中,表单在我的.Forms中吗?为什么?
protected override void Dispose(bool disposing)
obj=null;  //obj is the static reference in the class.