新聞中心
SDI、MDI概述,在Windows 應用程序模型中,一般分單實例應用程序和多實例應用程序,而對于單實例應用程序常見的又有多窗口SDI應用程序和單實例MDI應用程序。下面讓我們詳細了解一下:
SDI、MDI詳細介紹

創(chuàng)新互聯(lián)從2013年創(chuàng)立,是專業(yè)互聯(lián)網技術服務公司,擁有項目做網站、網站建設網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元環(huán)縣做網站,已為上家服務,為環(huán)縣各地企業(yè)和個人服務,聯(lián)系電話:13518219792
《Windows Forms 2.0 Programming》一書對Windows Forms的應用程序模型進行了比較詳細的介紹。下面列舉兩種單實例應用程序的一些特征。
一、多窗口SDI應用程序(Multiple-SDI Applications)通常具有以下特征:
只運行應用程序的單個實例;
多個頂層窗口互相獨立運行;
不會重新打開當前已經加載的文件;
當最后一個窗口關閉的時候,應用程序也會退出;
有一個Window菜單允許用戶查看并選擇當前有效的頂層窗口。
二、單實例MDI應用程序(Single-MDI Applications)通常具有以下特征:
只運行應用程序的單個實例;
多個MDI子窗口運行在同一個的MDI父窗口中;
支持菜單合并功能,子窗口的菜單按一定規(guī)則合并到MDI父窗口菜單中;
不會重新打開當前已經加載的文件;
當最后一個MDI子窗口被關閉時,應用程序不會退出;
當MDI父窗體被關閉時,應用程序退出;
有一個Window菜單允許用戶查看并選擇當前已經打開的子窗口。
SDI、MDI相關概念:
Single Instance
在.NET 2.0中,F(xiàn)CL提供了WindowsFormsApplicationBase類來簡化Windows應用程序編程,如果您是開發(fā)人員會感到感到奇怪,WindowsFormsApplicationBase類不在System.Windows.Forms 命名空間中而是屬于Microsoft.VisualBasic.ApplicationServices 命名空間,也許這是作為VB.NET開發(fā)人員的優(yōu)先好處吧。該類對應的程序集為Microsoft.VisualBasic.dll,不過該程序集包含在.NET框架中一起發(fā)布,如果要引用該程序集,在部署上不存在額外操作。
WindowsFormsApplicationBase類實現(xiàn)了類似于Application類的一些功能,不過該類還包含一些簡化Windows Forms應用程序開發(fā)的接口,下面來簡單了解一下。WindowsFormsApplicationBase類實現(xiàn)了對單實例應用程序的支持,通過設置IsSingleInstance 屬性為True以及重寫OnStartupNextInstance方法可以簡潔的實現(xiàn)。
- 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,在構造函數(shù)中設置為單實例模式,同時設置在主窗體關閉后退出應用程序。在繼承類中,OnCreateMainForm方法被重寫用來創(chuàng)建主窗體,如果要保證應用程序單一實例運行,還需要重寫OnStartupNextInstance方法,在該應用程序的下一個應用程序實例啟動時,OnStartupNextInstance方法會得到執(zhí)行,在上面的實現(xiàn)代碼中,調用基類方法同時激活主窗口。
Splash Screen
對于常見的Windows應用程序初始化過程中,可能會使用一個啟動畫面來顯示程序的初始化進程,比如微軟的Visual Studio和Office軟件。WindowsFormsApplicationBase提供了SplashScreen屬性或重寫OnCreateSplashScreen方法來設置啟動窗口。下面顯示了創(chuàng)建SplashScreen的實現(xiàn)代碼。
- application.SplashScreen = new SplashScreenForm();
如果 SplashScreen 屬性為空,那么受保護的ShowSplashScreen方法就會調用OnCreateSplashScreen方法創(chuàng)建初始屏幕窗口。
- protected override void OnCreateSplashScreen()
- {
- this.SplashScreen = new SplashScreenForm();
- }
也許,我們更想把SingleInstanceApplication類實現(xiàn)為單件模式,那可以簡單的調整一下代碼。
- 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的一些延續(xù)
關于多窗口SDI應用程序和單實例MDI應用程序的一些具體實現(xiàn),可以參考《Windows Forms 2.0 Programming》一書Chapter 14,作者網站上提供了該書的示例代碼和關于Chapter 14的完整內容。該書由Chris Sells著作,第二版包含了很多.NET 2.0的新功能,對于windows Forms應用程序開發(fā)進行了比較詳細的講解,關于書本的更多信息可以訪問Chris Sells的網站。
SDI、MDI的概念以及SDI、MDI相關的內容就向你介紹到這里,希望對你了解和學習SDI、MDI有所幫助。
【編輯推薦】
- 詳解.NET內存管理機制與垃圾回收
- .Net回車符的問題解決方案
- Windows 7下配置.NET開發(fā)環(huán)境及激活
- .NET牛人應該知道些什么
- .NET程序中的正則表達式性能問題
網站名稱:SDI、MDI的基本概念和實例理解
瀏覽地址:http://www.dlmjj.cn/article/dhhcpjj.html


咨詢
建站咨詢
