我有一个Windows应用程序,它有一个主窗体(主屏幕)和许多子窗体。
当子窗体关闭并从主窗体再次回调时,会发生System.ObjectDisposedException异常。
下面列出了我的屏幕代码:
调用子表单的主屏幕代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Application
{
public partial class Home : Form
{
private void Businesslogic_button_Click(object sender, EventArgs e)
{
BusinessRules.Show();
}
}
}
用于处理对象的Subform Designer.CS代码:
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
表单结束事件的子表单.CS代码:
bool formClosing false;
private void BusinessRules_FormClosing(object sender, FormClosingEventArgs e)
{
if (formClosing) return;
e.Cancel = true;
Timer Tmr = new Timer();
Tmr.Tick += Tmr_Tick;
Tmr.Start();
formClosing = true;
}
void Tmr_Tick(object sender, EventArgs e)
{
((Timer)sender).Stop();
this.Close();
}
答案 0 :(得分:2)
如果需要存储表单的状态,只需调用Hide()方法并设置e.Cancel = true。然后再次调用表单变量上的Show()以重新打开它。
如果您不想保留该州,只需关闭该表单即可。并从主页面打开表单的新实例。
答案 1 :(得分:1)
在Subform.CS中尝试:
private void Subform_FormClosing( object sender, FormClosingEventArgs e )
{
e.Cancel = true;
this.Hide();
}