多重文件介面就是所謂的MDI,他是從Windows 2.0下的Microsoft Excel試算表程式開始引入的,這是因為Excel試算表使用者有時需要同時操作多份表格,MDI正好為這種操作多表格提供了很大的方便,於是就產生了MDI程式。在視窗系統3.1版本中,MDI得到了更大範圍的應用。其中系統中的程式管理器和檔案管理工具都是MDI程式。 Visual C#是微軟公司推出的下一代主流程式開發語言,他也是一種功能十分強大的程式設計語言,正在受到越來越多的編程人員的喜歡。在Visual C#中,提供了為實現MDI程式設計的很多功能。本文就是通過一個具體的例子來詳細的介紹在Visual C#中的MDI編程。 一 程式設計及啟動並執行環境: (1)視窗2000伺服器版 (2).Net FrameWork SDK Beta 2版 二 程式設計的思路、主要步驟和實現方法: MDI編程主要就是要在主表單中能夠建立一個MDI表單,並且能夠對主表單中的所有MDI表單實現層疊、水平平鋪和垂直平鋪。雖然這些操作比較基本,但卻是程式設計中的要點和重點。本文就按照上述功能的順序來一一介紹。 (1)首先要設定主表單是一個MDI表單的容器,因為只有如此才能夠在此主表單上面添加MDI表單,從而實現對MDI編程,具體實現語句如下: this.IsMdiContainer = true ; (2)在主表單上面建立一個MDI表單。在程式中,建立一個MDI表單的命令是通過一個菜單的事件來實現的。在處理建立一個MDI表單事件中,關鍵是要設定此MDI表單的父表單。其實MDI表單和別的表單沒有什麼不同,不同點就在MDI表單有上一級表單,即父表單,而其他表單是沒有的,具體實現語句如下: private void New_Click ( object sender , EventArgs e )//這是一個菜單的事件 { Form frmTemp = new Form ( ) ; //建立一個表單 frmTemp.MdiParent = this ; //定義此表單的父表單,從而此表單成為一個MDI表單 frmTemp.Text = "表單0" + FormCount.ToString ( ) ; //設定MDI表單的標題 FormCount++ ; frmTemp.Show ( ) ; //把此MDI表單顯示出來 } (3)實現對MDI表單的層疊: 對於在主表單中實現對MDI表單的層疊操作,在主程式中,是通過一個方法來實現的,這個方法就是LayoutMdi,他所帶的參數是MdiLayout.Cascade,具體實現語句如下: private void Cascade_Click ( object sender , EventArgs e ) // 實現對主表單中的MDI表單的層疊操作 { this.LayoutMdi ( MdiLayout.Cascade ) ; } 實現操作後具體如: 圖01:在主表單中實現對MDI表單的層疊操作,點擊小圖放大 (4)實現對MDI表單的水平平鋪: 要在主表單實現MDI表單水平平鋪,也是通過LayoutMdi方法,此時所帶的參數是MdiLayout.TileHorizontal,具體實現語句如下: private void TileH_Click ( object sender , EventArgs e ) // 實現對主表單中的MDI表單的水平平鋪操作 { this.LayoutMdi ( MdiLayout.TileHorizontal ) ; } 實現操作後具體如: 圖02:在主表單中實現對MDI表單的水平平鋪操作,點擊小圖放大 (5)實現對MDI表單的垂直平鋪: 要在主表單實現MDI表單垂直平鋪,也是通過LayoutMdi方法,此時所帶的參數是MdiLayout.TileVertical,具體實現語句如下: private void TileV_Click ( object sender , EventArgs e ) // 實現對主表單中的MDI表單的垂直平鋪操作 { this.LayoutMdi ( MdiLayout.TileVertical ) ; } 實現操作後具體如: 圖03:在主表單中實現對MDI表單的垂直平鋪操作,點擊小圖放大 (6)在有些MDI程式,當建立一個MDI表單以後,往往會在某些功能表項目的下面生產一個以此MDI表單的名稱為名稱的子功能表項。在其他語言中要實現這種功能,可能就要在某些主功能表項目下動態加入子功能表了。但是在Visual C#中實現此種功能,就顯得比較簡單的,只有在要加入的主功能表項目下加入下面一句程式就可以了: WindowMenu.MdiList = true ; 本程式中,是在"視窗"主功能表項目下面加入MDI表單的子功能表項的。加入此語句後,程式運行介面具體如: 圖04:在主表單中實現在建立一個MDI表單後會在此主功能表項目下顯示存在的MDI表單功能表項目 點擊小圖放大 三. 程式原始碼(mdi.cs)及編譯方法: 通過對程式設計中的痛點介紹以後,就可以比較容易得到實現對上述MDI表單處理的來源程式代碼(mdi.cs),具體如下: mdi.cs來源程式代碼: using System ; using System.Windows.Forms ; using System.ComponentModel ; using System.Drawing ; // 匯入在程式中用到的名稱空間 class MDIDemo : Form { private static int FormCount = 1 ; //定義此常量是為了統計MDI表單數目, MainMenu mnuMain = new MainMenu ( ) ; MenuItem FileMenu ; MenuItem NewMenu ; MenuItem ExitMenu ; MenuItem WindowMenu ; public MDIDemo ( ) { this.IsMdiContainer = true ; this.Text = "MDI示範程式" ; FileMenu = new MenuItem ( ) ; FileMenu.Text = "檔案" ; WindowMenu = new MenuItem ( ) ; WindowMenu.Text = "視窗(&W)" ; WindowMenu.MenuItems.Add ( "表單層疊(&C)" , new EventHandler ( Cascade_Click ) ) ; WindowMenu.MenuItems.Add ( "水平平鋪(&H)" , new EventHandler ( TileH_Click ) ) ; WindowMenu.MenuItems.Add ( "垂直平鋪(&V)" , new EventHandler ( TileV_Click ) ) ; WindowMenu.MdiList = true ; //這一句比較重要,有了這一句就可以實現在建立一個MDI表單後會在此主功能表項目下顯示存在的MDI表單功能表項目 NewMenu = new MenuItem ( ) ; NewMenu.Text = "建立表單(&N)" ; NewMenu.Click += new EventHandler ( New_Click ) ; ExitMenu = new MenuItem ( ) ; ExitMenu.Text = "退出(&X)" ; ExitMenu.Click += new EventHandler ( Exit_Click ) ; FileMenu.MenuItems.Add ( NewMenu ) ; FileMenu.MenuItems.Add ( new MenuItem ( "-" ) ) ; FileMenu.MenuItems.Add ( ExitMenu ) ; mnuMain.MenuItems.Add ( FileMenu ) ; mnuMain.MenuItems.Add ( WindowMenu ) ; this.Menu = mnuMain ; } private void Cascade_Click ( object sender , EventArgs e ) // 實現對主表單中的MDI表單的層疊操作 { this.LayoutMdi ( MdiLayout.Cascade ) ; } private void TileH_Click ( object sender , EventArgs e ) // 實現對主表單中的MDI表單的水平平鋪操作 { this.LayoutMdi ( MdiLayout.TileHorizontal ) ; } private void TileV_Click ( object sender , EventArgs e ) // 實現對主表單中的MDI表單的垂直平鋪操作 { this.LayoutMdi ( MdiLayout.TileVertical ) ; |