无法访问已处置的对象 - 新解决方案
Cannot access a disposed object - New solution
我在重新打开之前关闭的表单时遇到错误。我的代码如下:
private void opentfk_Click(object sender, EventArgs e)
{
tfkform.Show();
}
上面的代码将打开按预期工作的表单,我目前遇到的问题是如果我决定要关闭那个新打开的表单(原始表单应该在后台保持打开状态)然后,忘记对该表格进行更改。按下按钮重新打开实际表格。我遇到了导致我的应用程序崩溃的 Whosebug 异常。
出现此消息的原因可能是什么?以及如何解决?据我所知,一旦在新打开的表单上点击 X,C# 应该处理该表单,以允许它重新打开?
请注意,这是一个新创建的解决方案,唯一的主要变化是按钮的处理程序
Exception Thrown: 'System.ObjectDispostedException' in
System.Windows.Forms.dll ("Cannot Access a disposed Object.")
在您单击第二个窗体上的 X
后,假设您不取消关闭事件,那么该窗体将被处理掉。不能再显示了。
选项一是每次都创建一个新实例,而不是尝试重用该实例。
private void opentfk_Click(object sender, EventArgs e)
{
var tfkform = new TfkForm();
tfkform.Show();
// or using (var tfkform = new TfkForm())
// tfkform.ShowDialog();
}
选项二是订阅第二个表单的 FormClosing
事件。您可以取消关闭事件,而只是隐藏表单。然后你可以再次显示该表单,你不会得到异常。
private void TfkForm_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
Hide();
}
选项三是检查您的表单引用是否为空或已被处置。下面是使用 Form1 和 Form2 的示例:
public partial class Form1 : Form
{
Form2 f2 = new Form2();
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (f2 == null || f2.IsDisposed)
{
f2 = new Form2();
f2.Show();
}
else
{
if (f2.WindowState == FormWindowState.Minimized)
{
f2.WindowState = FormWindowState.Normal;
}
f2.Show();
f2.BringToFront();
}
}
}
我在重新打开之前关闭的表单时遇到错误。我的代码如下:
private void opentfk_Click(object sender, EventArgs e)
{
tfkform.Show();
}
上面的代码将打开按预期工作的表单,我目前遇到的问题是如果我决定要关闭那个新打开的表单(原始表单应该在后台保持打开状态)然后,忘记对该表格进行更改。按下按钮重新打开实际表格。我遇到了导致我的应用程序崩溃的 Whosebug 异常。
出现此消息的原因可能是什么?以及如何解决?据我所知,一旦在新打开的表单上点击 X,C# 应该处理该表单,以允许它重新打开?
请注意,这是一个新创建的解决方案,唯一的主要变化是按钮的处理程序
Exception Thrown: 'System.ObjectDispostedException' in System.Windows.Forms.dll ("Cannot Access a disposed Object.")
在您单击第二个窗体上的 X
后,假设您不取消关闭事件,那么该窗体将被处理掉。不能再显示了。
选项一是每次都创建一个新实例,而不是尝试重用该实例。
private void opentfk_Click(object sender, EventArgs e)
{
var tfkform = new TfkForm();
tfkform.Show();
// or using (var tfkform = new TfkForm())
// tfkform.ShowDialog();
}
选项二是订阅第二个表单的 FormClosing
事件。您可以取消关闭事件,而只是隐藏表单。然后你可以再次显示该表单,你不会得到异常。
private void TfkForm_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
Hide();
}
选项三是检查您的表单引用是否为空或已被处置。下面是使用 Form1 和 Form2 的示例:
public partial class Form1 : Form
{
Form2 f2 = new Form2();
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (f2 == null || f2.IsDisposed)
{
f2 = new Form2();
f2.Show();
}
else
{
if (f2.WindowState == FormWindowState.Minimized)
{
f2.WindowState = FormWindowState.Normal;
}
f2.Show();
f2.BringToFront();
}
}
}