zoukankan      html  css  js  c++  java
  • 如何判斷是否是主窗體關閉?

            我分別編寫了主窗題和子窗體的Closing事件,可當關閉主窗體時,同時也觸發了子窗體的Closing事件。這個讓我很頭疼。
    不過我還是找到了解決方法。即在子窗體中加入一個 ”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;
                        }
                    }
                }  
            }


    CloseReason 列舉型別
    成員名稱 說明
    ApplicationExitCall 已叫用 (Invoke) Application 類別的 Exit 方法。 

    FormOwnerClosing 正在關閉主控表單。

    MdiFormClosing 正在關閉這個多重文件介面 (MDI) 表單的父表單。  
    None 關閉的原因尚未定義或無法判斷。

    TaskManagerClosing Microsoft Windows 工作管理員正在關閉應用程式。

    UserClosing 使用者正透過使用者介面 (UI) 關閉表單,例如按下表單視窗上的 [關閉] 按鈕、選取視窗控制功能表中的 [關閉] 或按下 ALT+F4。

    WindowsShutDown 關機之前,作業系統正在關閉所有應用程式。



            /// <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;
                        }
                    } 
                }
            }

  • 相关阅读:
    451. Sort Characters By Frequency
    424. Longest Repeating Character Replacement
    68. Text Justification
    44. Wildcard Matching
    160. Intersection of Two Linked Lists
    24. Swap Nodes in Pairs
    93. 递归实现组合型枚举
    98. 分形之城
    97. 约数之和
    96. 奇怪的汉诺塔
  • 原文地址:https://www.cnblogs.com/scottckt/p/874537.html
Copyright © 2011-2022 走看看