110,534
社区成员
发帖
与我相关
我的任务
分享
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
foreach (System.Windows.Forms.Form f in this.MdiChildren)
{
System.Windows.Forms.MessageBox.Show("退出前,请先关闭[" + f.Text + "]窗口", " v1.0", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information);
f.Activate();
return;
}
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
同时对父窗口做了一些处理如下:
#region 处理显示与关闭子窗口
/// <summary>
/// 显示指定窗口
/// </summary>
/// <param name="f">指定窗口</param>
public void My_ShowMdiForm(Form f)
{
if (!f.IsDisposed)
{
foreach (Form fr in this.MdiChildren)
{
if (f.Name == fr.Name)
{
fr.Activate();
return;
}
}
f.MdiParent = this;
f.WindowState = FormWindowState.Maximized;
f.StartPosition = FormStartPosition.Manual;
f.Disposed += new EventHandler(My_MdiFormDisposed);
f.Activated += new EventHandler(My_MdiFormActivated);
f.Show();
}
}
private void My_MdiFormActivated(object sender, EventArgs e)
{
((Form)sender).WindowState = FormWindowState.Maximized;
((Form)sender).StartPosition = FormStartPosition.Manual;
}
private void My_MdiFormDisposed(object sender, EventArgs e)
{
foreach (Form f in this.MdiChildren)
{
f.WindowState = FormWindowState.Maximized;
break;
}
}
#endregion
后来加了下面的代码解决的问题,但现在还是不理解
private void frm_main_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = false;//不添加此句主窗口可能无法关闭。
}
debug时,发现当窗口不能关闭时,e.Cancel 值为true。一直找不到原因。因为关不掉父窗口时已经没有子窗口,也不可能执行Dispose事件。
由于项目急着测试使用,功能完成了也没有太多时间研究。先感谢各位的帮助和关注,暂不结贴,希望能有哪位给出一个原由。