自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SDI、MDI的基本概念和實例理解

開發(fā) 后端
SDI、MDI是.NET2.0中的技術(shù),那么什么是SDI、MDI呢?SDI、MDI的相關(guān)概念是什么呢?那么本文就向你介紹相關(guān)的內(nèi)容,希望對你了解和學(xué)習(xí)SDI、MDI有所幫助。

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

《Windows Forms 2.0 Programming》一書對Windows Forms的應(yīng)用程序模型進行了比較詳細的介紹。下面列舉兩種單實例應(yīng)用程序的一些特征。

一、多窗口SDI應(yīng)用程序(Multiple-SDI Applications)通常具有以下特征:

只運行應(yīng)用程序的單個實例;

多個頂層窗口互相獨立運行;

不會重新打開當前已經(jīng)加載的文件;

當最后一個窗口關(guān)閉的時候,應(yīng)用程序也會退出;

有一個Window菜單允許用戶查看并選擇當前有效的頂層窗口。

二、單實例MDI應(yīng)用程序(Single-MDI Applications)通常具有以下特征:

只運行應(yīng)用程序的單個實例;

多個MDI子窗口運行在同一個的MDI父窗口中;

支持菜單合并功能,子窗口的菜單按一定規(guī)則合并到MDI父窗口菜單中;

不會重新打開當前已經(jīng)加載的文件;

當最后一個MDI子窗口被關(guān)閉時,應(yīng)用程序不會退出;

當MDI父窗體被關(guān)閉時,應(yīng)用程序退出;

有一個Window菜單允許用戶查看并選擇當前已經(jīng)打開的子窗口。

SDI、MDI相關(guān)概念:

Single Instance

在.NET 2.0中,F(xiàn)CL提供了WindowsFormsApplicationBase類來簡化Windows應(yīng)用程序編程,如果您是開發(fā)人員會感到感到奇怪,WindowsFormsApplicationBase類不在System.Windows.Forms 命名空間中而是屬于Microsoft.VisualBasic.ApplicationServices 命名空間,也許這是作為VB.NET開發(fā)人員的優(yōu)先好處吧。該類對應(yīng)的程序集為Microsoft.VisualBasic.dll,不過該程序集包含在.NET框架中一起發(fā)布,如果要引用該程序集,在部署上不存在額外操作。

WindowsFormsApplicationBase類實現(xiàn)了類似于Application類的一些功能,不過該類還包含一些簡化Windows Forms應(yīng)用程序開發(fā)的接口,下面來簡單了解一下。WindowsFormsApplicationBase類實現(xiàn)了對單實例應(yīng)用程序的支持,通過設(shè)置IsSingleInstance 屬性為True以及重寫OnStartupNextInstance方法可以簡潔的實現(xiàn)。

  1. public sealed class   
  2. SingleInstanceApplication : WindowsFormsApplicationBase  
  3. {  
  4. public SingleInstanceApplication() : base()  
  5. {  
  6. this.IsSingleInstance = true;  
  7. this.ShutdownStyle = ShutdownMode.AfterMainFormCloses;  
  8. }  
  9. protected override void OnCreateMainForm()  
  10. {  
  11. this.MainForm = new MainForm();  
  12. }  
  13.    
  14. protected override void   
  15. OnStartupNextInstance(StartupNextInstanceEventArgs e)  
  16. {  
  17. base.OnStartupNextInstance(e);  
  18. this.MainForm.Activate();  
  19. }  
  20. }  

SingleInstanceApplication類繼承自WindowsFormsApplicationBase,在構(gòu)造函數(shù)中設(shè)置為單實例模式,同時設(shè)置在主窗體關(guān)閉后退出應(yīng)用程序。在繼承類中,OnCreateMainForm方法被重寫用來創(chuàng)建主窗體,如果要保證應(yīng)用程序單一實例運行,還需要重寫OnStartupNextInstance方法,在該應(yīng)用程序的下一個應(yīng)用程序?qū)嵗龁訒r,OnStartupNextInstance方法會得到執(zhí)行,在上面的實現(xiàn)代碼中,調(diào)用基類方法同時激活主窗口。

Splash Screen

對于常見的Windows應(yīng)用程序初始化過程中,可能會使用一個啟動畫面來顯示程序的初始化進程,比如微軟的Visual Studio和Office軟件。WindowsFormsApplicationBase提供了SplashScreen屬性或重寫OnCreateSplashScreen方法來設(shè)置啟動窗口。下面顯示了創(chuàng)建SplashScreen的實現(xiàn)代碼。

  1. application.SplashScreen = new SplashScreenForm();  

如果 SplashScreen 屬性為空,那么受保護的ShowSplashScreen方法就會調(diào)用OnCreateSplashScreen方法創(chuàng)建初始屏幕窗口。

  1. protected override void OnCreateSplashScreen()  
  2. {  
  3. this.SplashScreen = new SplashScreenForm();  

 

也許,我們更想把SingleInstanceApplication類實現(xiàn)為單件模式,那可以簡單的調(diào)整一下代碼。

  1. public sealed class   
  2. SingleInstanceApplication :   
  3. WindowsFormsApplicationBase  
  4. {  
  5. private static readonly   
  6. SingleInstanceApplication application =   
  7. new SingleInstanceApplication();  
  8.    
  9. private SingleInstanceApplication() : base()  
  10. {  
  11. this.IsSingleInstance = true;  
  12. this.ShutdownStyle = ShutdownMode.AfterMainFormCloses;  
  13. }  
  14.    
  15. public static SingleInstanceApplication Application  
  16. {  
  17. get { return application; }  
  18. }  
  19. }  

SDI、MDI的一些延續(xù)

關(guān)于多窗口SDI應(yīng)用程序和單實例MDI應(yīng)用程序的一些具體實現(xiàn),可以參考《Windows Forms 2.0 Programming》一書Chapter 14,作者網(wǎng)站上提供了該書的示例代碼和關(guān)于Chapter 14的完整內(nèi)容。該書由Chris Sells著作,第二版包含了很多.NET 2.0的新功能,對于windows Forms應(yīng)用程序開發(fā)進行了比較詳細的講解,關(guān)于書本的更多信息可以訪問Chris Sells的網(wǎng)站。

SDI、MDI的概念以及SDI、MDI相關(guān)的內(nèi)容就向你介紹到這里,希望對你了解和學(xué)習(xí)SDI、MDI有所幫助。

【編輯推薦】

  1. 詳解.NET內(nèi)存管理機制與垃圾回收
  2. .Net回車符的問題解決方案
  3. Windows 7下配置.NET開發(fā)環(huán)境及激活
  4. .NET牛人應(yīng)該知道些什么
  5. .NET程序中的正則表達式性能問題
責(zé)任編輯:仲衡 來源: CSDN博客
相關(guān)推薦

2010-04-01 16:54:06

Oracle體系結(jié)構(gòu)

2011-03-28 11:05:17

ODBC

2010-08-23 16:58:17

DHCP協(xié)議

2010-07-07 15:17:40

LDAP協(xié)議

2010-06-24 13:26:53

FTP協(xié)議

2017-05-02 14:45:11

深度學(xué)習(xí)機器學(xué)習(xí)人工神經(jīng)網(wǎng)絡(luò)

2010-04-19 10:08:46

Oracle視圖

2010-06-08 16:11:10

SPI總線協(xié)議

2017-07-10 16:40:09

2010-06-21 18:04:08

2014-04-16 15:11:19

Spark

2009-03-20 11:46:10

MGCP協(xié)議網(wǎng)關(guān)

2012-09-11 14:39:03

Moosefs

2015-03-02 15:05:45

LTE

2010-06-12 14:12:22

RSVP協(xié)議

2010-06-29 13:00:49

EIGRP協(xié)議

2010-06-08 16:52:38

CANopen總線協(xié)議

2023-06-14 00:21:52

2012-04-20 13:27:17

NFC

2013-07-15 15:51:32

iOS多線程GCD基本概念Dispatch Qu
點贊
收藏

51CTO技術(shù)棧公眾號