【发布时间】:2019-04-29 00:07:20
【问题描述】:
我正在尝试创建一个可以打开另一个表单的点击事件。我不希望用户能够关闭此窗口,因为再次执行单击事件时出现以下异常。
System.ObjectDisposedException: '无法访问已处置的对象。 对象名称:'Form2'。'
我不确定我是否正确地实现了这一点,或者有更好的方法来做到这一点。
Form1
public Form2 f = new Form2();
private void Btnsearch_Click(object sender, EventArgs e)
{
f.Show();
}
Form2
private bool allowClose = false;
private void Btnclose_Click(object sender, EventArgs e)
{
allowClose = true;
this.Hide();
}
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
if (!allowClose)
e.Cancel = true;
}
【问题讨论】:
-
为什么不在点击处理程序中移动表单的创建?
-
'我不确定我是否正确地实现了这一点,或者有更好的方法来做到这一点。' 您是否面临任何问题/异常,或者您正在寻找只是为了代码审查?
-
@RezaAghaei -
ObjectDisposedException似乎是 OP 的问题。 -
有更好的方法。不要存储在某个时候肯定会被丢弃的对象的instance。需要时创建一个新的。您是否需要从创建它的 Form(类)访问新实例?将 new 实例分配给 Field(或 Form1 的私有属性或用于管理 UI 对象创建/销毁的其他类)。 Form 与其他任何类一样是一个类:与任何其他类一样,当您知道该实例必然被处置时,您不能盲目地依赖它的实例。这是错误的部分:
public Form2 f = new Form2();. -
在
Btnsearch_Click中,创建Form2 的新实例并显示它。就是这样。