我已经坚持了一段时间了。我无法在按钮点击上打开新表单。
如果我在开始表单构造函数中创建和.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;
}
希望这已经足够了。
答案 0 :(得分:5)
在我的情况下,这是因为我想让我的表格非模态。所以我将它们从form.ShowDialog(parentForm)
更改为form.Show()
。
但如果我尝试第二次显示表单,则会导致ObjectDisposedException
,因为代码中的某处是this.Close();
。 Form.Close
也处理它。
MSDN:
当表单关闭时,在对象中创建的所有资源都是 关闭并表格处理。
我只需要改变
this.Close();
到
this.Hide();
答案 1 :(得分:1)
发现我的代码问题。 我再看了一下堆栈跟踪,发现了一条消息“Icon”。
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;
}
感谢您的帮助......
答案 2 :(得分:0)
问题是您的表单对象会松开作用域并被废弃。
如果要保持对话框打开,请使用Form.ShowDialog()
;
试试这个:
private void resultButton_Click(object sender, EventArgs e)
{
using(ResultForm rf = new ResultForm(this))
{
rf.ShowDialog();
}
this.Enabled = false;
}
答案 3 :(得分:0)
Wile在Windows窗体上实现单例模式我也遇到了这个错误。 解决方案是您必须为
中的静态引用分配空值protected override void Dispose(bool disposing)
通过简单的线条。
obj=null; //obj is the static reference in the class.