Windows Forms中SDI和MDI簡介

來源:互聯網
上載者:User

Windows Forms 中SDI和MDI簡介 發布日期:2008-07-23 | 更新日期:2009-03-29作者:鄭佐
摘要:本文簡單介紹.NET Windows Forms中SDI和MDI應用程式模型和實現。  本頁內容概述SDI和MDISingle InstanceSplash Screen結束語  概述在Windows 應用程式模型中,一般分單一實例應用程式和多執行個體應用程式,而對於單一實例應用程式常見的又有多視窗SDI應用程式和單一實例MDI應用程式。  SDI 和MDI《Windows Forms 2.0 Programming》一書對Windows Forms的應用程式模型進行了比較詳細的介紹。下面列舉兩種單一實例應用程式的一些特徵。a.多視窗SDI應用程式(Multiple-SDI Applications)通常具有以下特徵:只運行應用程式的單個執行個體;多個頂層視窗互相獨立運行;不會重新開啟當前已經載入的檔案;當最後一個視窗關閉的時候,應用程式也會退出;有一個Window菜單允許使用者查看並選擇當前有效頂層視窗。 b.單一實例MDI應用程式(Single-MDI Applications)通常具有以下特徵:只運行應用程式的單個執行個體;多個MDI子視窗運行在同一個的MDI父視窗中;支援菜單合并功能,子視窗的菜單按一定規則合并到MDI父視窗菜單中;不會重新開啟當前已經載入的檔案;當最後一個MDI子視窗被關閉時,應用程式不會退出;當MDI父表單被關閉時,應用程式退出;有一個Window菜單允許使用者查看並選擇當前已經開啟的子視窗。  Single Instance在.NET 2.0中,FCL提供了WindowsFormsApplicationBase類來簡化Windows應用程式編程,如果您是開發人員會感到感到奇怪,WindowsFormsApplicationBase類不在System.Windows.Forms 命名空間中而是屬於Microsoft.VisualBasic.ApplicationServices 命名空間,也許這是作為VB.NET開發人員的優先好處吧。該類對應的程式集為Microsoft.VisualBasic.dll,不過該程式集包含在.NET架構中一起發布,如果要引用該程式集,在部署上不存在額外操作。 WindowsFormsApplicationBase類實現了類似於Application類的一些功能,不過該類還包含一些簡化Windows Forms應用程式開發的介面,下面來簡單瞭解一下。 WindowsFormsApplicationBase類實現了對單一實例應用程式的支援,通過設定IsSingleInstance 屬性為True以及重寫OnStartupNextInstance方法可以簡潔的實現。
public sealed class SingleInstanceApplication : WindowsFormsApplicationBase{    public SingleInstanceApplication() : base()    {        this.IsSingleInstance = true;        this.ShutdownStyle = ShutdownMode.AfterMainFormCloses;    }    protected override void OnCreateMainForm()    {        this.MainForm = new MainForm();    }     protected override void OnStartupNextInstance(StartupNextInstanceEventArgs e)    {        base.OnStartupNextInstance(e);        this.MainForm.Activate();    }}
 SingleInstanceApplication類繼承自WindowsFormsApplicationBase,在建構函式中設定為單一實例模式,同時設定在主表單關閉後退出應用程式。在繼承類中,OnCreateMainForm方法被重寫用來建立主表單,如果要保證應用程式單一執行個體運行,還需要重寫OnStartupNextInstance方法,在該應用程式的下一個應用程式執行個體啟動時,OnStartupNextInstance方法會得到執行,在上面的實現代碼中,調用基類方法同時啟用主視窗。  Splash Screen對於常見的Windows應用程式初始化過程中,可能會使用一個啟動畫面來顯示程式的初始化進程,比如微軟的Visual Studio和Office軟體。WindowsFormsApplicationBase提供了SplashScreen屬性或重寫OnCreateSplashScreen方法來設定啟動視窗。下面顯示了建立SplashScreen的實現代碼。
application.SplashScreen = new SplashScreenForm();
 如果 SplashScreen 屬性為空白,那麼受保護的ShowSplashScreen方法就會調用OnCreateSplashScreen方法建立啟動顯示畫面視窗。
protected override void OnCreateSplashScreen(){    this.SplashScreen = new SplashScreenForm();}
 也許,我們更想把SingleInstanceApplication類實現為單件模式,那可以簡單的調整一下代碼。
public sealed class SingleInstanceApplication : WindowsFormsApplicationBase{    private static readonly SingleInstanceApplication application = new SingleInstanceApplication();     private SingleInstanceApplication() : base()    {        this.IsSingleInstance = true;        this.ShutdownStyle = ShutdownMode.AfterMainFormCloses;    }     public static SingleInstanceApplication Application    {        get { return application; }    }}
  結束語關於多視窗SDI應用程式和單一實例MDI應用程式的一些具體實現,可以參考《Windows Forms 2.0 Programming》一書Chapter 14,作者網站上提供了該書的範例程式碼和關於Chapter 14的完整內容。該書由Chris Sells著作,第二版包含了很多.NET 2.0的新功能,對於windows Forms應用程式開發進行了比較詳細的講解,關於書本的更多資訊可以訪問Chris Sells的網站。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.