不過我還是找到了解決方法。即在子窗體中加入一個 ”e.CloseReason“ 的事件判斷。
//子窗體Closing事件
mFMEntity.FormClosing += new FormClosingEventHandler(mFMEntity_FormClosing);
/// <summary>
///關閉時,提示自動保存事件
/// scott 20070828
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
static void mFMEntity_FormClosing(object sender, FormClosingEventArgs e)
{
//判斷是否是主窗體關閉
注意:下邊判斷是否是主窗體關閉
if (e.CloseReason != CloseReason.MdiFormClosing)
{
ArrayList alChanged = new ArrayList();
if (mfrmMain.MdiChildren.Length > 0)
{
//判斷當前窗體是否是FMEntity
if (mfrmMain.ActiveMdiChild is WinControls.FMEntity)
{
WinControls.FMEntity fmChanged = (WinControls.FMEntity)mfrmMain.ActiveMdiChild;
if (fmChanged.Mode == 2)
{
//將窗體放入ArrayList中,便於傳遞
alChanged.Add(fmChanged);
}
}
}
if (alChanged != null && alChanged.Count > 0)
{
int iResult = FrontHelper.ShowExitSaveForm(alChanged);
switch (iResult)
{
case 1:
//save
foreach (WinControls.FMEntity fmentity in alChanged.ToArray(typeof(WinControls.FMEntity)))
{
//保存資料
FrontHelper.SaveData();
}
break;
case -1:
//don't save
break;
case 0:
//cancel
e.Cancel = true;
break;
default:
//save
break;
}
}
}
}
mFMEntity.FormClosing += new FormClosingEventHandler(mFMEntity_FormClosing);
/// <summary>
///關閉時,提示自動保存事件
/// scott 20070828
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
static void mFMEntity_FormClosing(object sender, FormClosingEventArgs e)
{
//判斷是否是主窗體關閉
注意:下邊判斷是否是主窗體關閉
if (e.CloseReason != CloseReason.MdiFormClosing)
{
ArrayList alChanged = new ArrayList();
if (mfrmMain.MdiChildren.Length > 0)
{
//判斷當前窗體是否是FMEntity
if (mfrmMain.ActiveMdiChild is WinControls.FMEntity)
{
WinControls.FMEntity fmChanged = (WinControls.FMEntity)mfrmMain.ActiveMdiChild;
if (fmChanged.Mode == 2)
{
//將窗體放入ArrayList中,便於傳遞
alChanged.Add(fmChanged);
}
}
}
if (alChanged != null && alChanged.Count > 0)
{
int iResult = FrontHelper.ShowExitSaveForm(alChanged);
switch (iResult)
{
case 1:
//save
foreach (WinControls.FMEntity fmentity in alChanged.ToArray(typeof(WinControls.FMEntity)))
{
//保存資料
FrontHelper.SaveData();
}
break;
case -1:
//don't save
break;
case 0:
//cancel
e.Cancel = true;
break;
default:
//save
break;
}
}
}
}
/// <summary>
/// 主窗體Closing事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FMMain_FormClosing(object sender, FormClosingEventArgs e)
{
if (this.MdiChildren.Length > 0)
{
ArrayList alChanged = new ArrayList();
for (int iForm = 0; iForm < this.MdiChildren.Length; iForm++)
{
if (this.MdiChildren[iForm] is WinControls.FMEntity)
{
WinControls.FMEntity fmChanged = (WinControls.FMEntity)this.MdiChildren[iForm];
if (fmChanged.Mode == 2)
{
alChanged.Add(fmChanged);
}
}
}
if (alChanged != null && alChanged.Count > 0)
{
int iResult = FrontHelper.ShowExitSaveForm(alChanged);
switch (iResult)
{
case 1:
//save
foreach (WinControls.FMEntity fmentity in alChanged.ToArray(typeof(WinControls.FMEntity)))
{
FrontHelper.SaveData();
}
break;
case -1:
//don't save
break;
case 0:
//cancel
e.Cancel = true;
break;
default:
//save
break;
}
}
}
}
/// 主窗體Closing事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FMMain_FormClosing(object sender, FormClosingEventArgs e)
{
if (this.MdiChildren.Length > 0)
{
ArrayList alChanged = new ArrayList();
for (int iForm = 0; iForm < this.MdiChildren.Length; iForm++)
{
if (this.MdiChildren[iForm] is WinControls.FMEntity)
{
WinControls.FMEntity fmChanged = (WinControls.FMEntity)this.MdiChildren[iForm];
if (fmChanged.Mode == 2)
{
alChanged.Add(fmChanged);
}
}
}
if (alChanged != null && alChanged.Count > 0)
{
int iResult = FrontHelper.ShowExitSaveForm(alChanged);
switch (iResult)
{
case 1:
//save
foreach (WinControls.FMEntity fmentity in alChanged.ToArray(typeof(WinControls.FMEntity)))
{
FrontHelper.SaveData();
}
break;
case -1:
//don't save
break;
case 0:
//cancel
e.Cancel = true;
break;
default:
//save
break;
}
}
}
}