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

  • 相关阅读:
    THINKPHP 错误:Undefined class constant 'MYSQL_ATTR_INIT_COMMAND'
    Vs2013 坑爹的Target framework问题
    在使用Vs2013打开Vs2008的解决方案时出现了以下错误:此版本的应用程序不支持其项目类型(.csproj)
    sql server2008R2 无法连接到WMI提供程序。你没有权限或者该服务器无法访问
    SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间。
    [UE4]手持多把枪的位置调节
    [UE4]函数分组
    [UE4]射击起点、终点的计算方法
    [UE4]条件融合动画: Blend Posed by int
    [UE4]函数和事件的区别
  • 原文地址:https://www.cnblogs.com/scottckt/p/874537.html
Copyright © 2011-2022 走看看