gpt4 book ai didi

c# - 自动关闭显示对话框

转载 作者:行者123 更新时间:2023-12-03 02:00:20 31 4
gpt4 key购买 nike

我有两个表单,Form1 和 Form2。当程序运行时,Form1 是启动的窗体。然后我想调用Form2,将其显示在Form1前面,在Form2中做一些事情,然后在没有任何输入的情况下自动关闭Form2,以便用户可以继续使用Form1。

我尝试过以下方法:

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

Form2 otherForm = new Form2();
otherForm.ShowDialog();

//do more stuff here after Form2 has opened and closed
}
}

public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();

//do some stuff here

this.Close();
}
}

当我尝试此操作时,我收到一个 ObjectDisposeException,其中包含消息“无法访问已处置的对象”。我尝试在互联网上搜索,但没有找到任何东西。我尝试过使用 this.Dispose() 代替,以及使用 .Show() 代替 .ShowDialog()。我想要以这种方式完成的事情可能吗?

我曾考虑过让 Form2 成为它自己的 .exe 并调用 .exe 作为替代方案,但我想在重写所有内容之前我应该​​询问 StackOverflow 的专家。

最佳答案

正如 Markus 所提到的,因为您的 Form2 构造函数调用 this.Close(),一旦出现 Form2 otherForm = new Form2 行,Form2 窗口就已经关闭(); 结束。

close() 方法除了关闭窗口(以及任何拥有的窗口)之外还释放资源。因此,在下面的行中,当调用 otherForm.ShowDialog(); 时,它无法访问 otherForm (已被释放)并抛出 ObjectDispositedException 。这解释了您遇到异常的原因。

要修复此问题,请从 Form2 构造函数中删除 this.Close()。您仍然需要调用 close() 方法,但要在构造函数之外以及在 Form2 中完成您想要做的事情之后进行。

例如:

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

Form2 otherForm = new Form2();
otherForm.Show(this);
otherForm.DoStuff();

//do more stuff here after Form2 has opened and closed
}
}

public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}

public void DoStuff()
{
// do stuff here as you wish
// close method goes here
}
}

关于c# - 自动关闭显示对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48937694/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com