程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> Visual C#中的MDI編程

Visual C#中的MDI編程

編輯:C#入門知識

Visual C#中的MDI編程

多文檔界面就是所謂的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 ( ) ;
file://新建一個窗體
frmTemp.MdiParent = this ;
file://定義此窗體的父窗體,從而此窗體成為一個MDI窗體
frmTemp.Text = "窗體0" + FormCount.ToString ( ) ;
file://設定MDI窗體的標題
FormCount++ ;
frmTemp.Show ( ) ;
file://把此MDI窗體顯示出來
}
(3)實現對MDI窗體的層疊:

對於在主窗體中實現對MDI窗體的層疊操作,在主程序中,是通過一個方法來實現的,這個方法就是LayoutMdi,他所帶的參數是MdiLayout.Cascade,具體實現語句如下:
private void Cascade_Click ( object sender , EventArgs e )
// 實現對主窗體中的MDI窗體的層疊操作
{
this.LayoutMdi ( MdiLayout.Cascade ) ;
}

(4)實現對MDI窗體的水平平鋪:

要在主窗體實現MDI窗體水平平鋪,也是通過LayoutMdi方法,此時所帶的參數是MdiLayout.TileHorizontal,具體實現語句如下:

private void TileH_Click ( object sender , EventArgs e )
// 實現對主窗體中的MDI窗體的水平平鋪操作
{
this.LayoutMdi ( MdiLayout.TileHorizontal ) ;
}

(5)實現對MDI窗體的垂直平鋪:

要在主窗體實現MDI窗體垂直平鋪,也是通過LayoutMdi方法,此時所帶的參數是MdiLayout.TileVertical,具體實現語句如下:

private void TileV_Click ( object sender , EventArgs e )
// 實現對主窗體中的MDI窗體的垂直平鋪操作
{
this.LayoutMdi ( MdiLayout.TileVertical ) ;
}

(6)在有些MDI程序,當新建一個MDI窗體以後,往往會在某些菜單項的下面生產一個以此MDI窗體的名稱為名稱的子菜單項。在其他語言中要實現這種功能,可能就要在某些主菜單項下動態的加入子菜單了。但是在Visual C#中實現此種功能,就顯得比較簡單的,只有在要加入的主菜單項下加入下面一句程序就可以了:
WindowMenu.MdiList = true ; 本程序中,是在"窗口"主菜單項下面加入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 ;
file://定義此常量是為了統計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 ;
file://這一句比較重要,有了這一句就可以實現在新建一個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 ) ;
}


private void New_Click ( object sender , EventArgs e )
{
Form frmTemp = new Form ( ) ;
file://新建一個窗體
frmTemp.MdiParent = this ;
file://定義此窗體的父窗體,從而此窗體成為一個MDI窗體
frmTemp.Text = "窗體0" + FormCount.ToString ( ) ;
file://設定MDI窗體的標題
FormCount++ ;
frmTemp.Show ( ) ;
file://把此MDI窗體顯示出來
}

private void Exit_Click ( object sender , EventArgs e )
{
this.Dispose ( );
Application.Exit ( ) ;
}
public static void Main ( )
{
Application.Run ( new MDIDemo ( ) ) ;
}
}

再經過以下編譯命令編譯過以後,就可以得到執行程序:
csc /t:winexe /r:system.dll /r:system.windows.forms.dll /r:system.drawing.dll mdi.cs

四. 總結:

本文主要是介紹如何用Visual C#來實現對MDI窗體的編程。即:新建MDI窗體、MDI窗體層疊、MDI窗體水平平鋪、MDI窗體的垂直平鋪。通過上述介紹,可見,在Visual C#中處理MDI還是相當比較簡單的

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved