我已经坚持了一段时间了。我无法在单击按钮时打开新表单。如果我在开始表单构造函数中创建并.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(parentForm)
改为form.Show()
.
但是,如果我尝试第二次显示表单,这会导致ObjectDisposedException
,因为代码中的某处this.Close();
. Form.Close
也处置了它。
MSDN:
关闭表单时,在该对象中创建的所有资源都是 关闭并释放表单。
我只需要改变
this.Close();
自
this.Hide();
发现我的代码问题。我又看了一眼堆栈跟踪,发现我有一条消息"图标"。
this.Icon.Dispose();
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()
;
试试这个:
private void resultButton_Click(object sender, EventArgs e)
{
using(ResultForm rf = new ResultForm(this))
{
rf.ShowDialog();
}
this.Enabled = false;
}
Wile 在窗口窗体上实现单例模式 我也得到了这个错误。解决方案是您必须为 中的静态引用分配一个 null 值
protected override void Dispose(bool disposing)
通过放置简单的线条。
obj=null; //obj is the static reference in the class.