使用MDI窗體實現多窗口效果

C#MDI窗體實現多窗口效果  
Visual C#是微軟公司推出的下一代主流程序開發語言,他也是一種功能十分強大的程
序設計語言,正在受到愈來愈多的編程人員的喜歡。在Visual C#中,提供了爲實現MDI程序設計的不少功能。本文就是經過一個具體的例子來詳細的介紹在Visual C#中的MDI編程。   
  一程序設計及運行的環境:
  (1)視窗2000服務器版
  (2).Net FrameWork SDK Beta 2版
  二程序設計的思路、主要步驟和實現方法:
  MDI編程主要就是要在主窗體中可以新建一個MDI窗體,而且可以對主窗體中的全部MDI窗體實現層疊、水平平鋪和垂直平鋪。雖然這些操做比較基本,但倒是程序設計中的要點和重點。本文就按照上述功能的順序來一一介紹。
  (1)首先要設定主窗體是一個MDI窗體的容器,由於只有如此纔可以在此主窗體上面添加MDI窗體,從而實現對MDI編程,具體實現語句以下:
  
public Form1()
 {
            InitializeComponent();
            this.IsMdiContainer = true;
 }

我是直接把this.IsMdiContainer = true ;寫在窗體的構造函數中,你也能夠寫的form_load函數中。html


  (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 ) ;
}


實現操做後具體以下圖:windows


圖01:在主窗體中實現對MDI窗體的層疊操做,點擊小圖放大

  (4)實現對MDI窗體的水平平鋪:
  要在主窗體實現MDI窗體水平平鋪,也是經過LayoutMdi方法,此時所帶的參數是MdiLayout.TileHorizontal,具體實現語句以下:
this.LayoutMdi ( MdiLayout.TileHorizontal ) ;
 
實現操做後具體以下圖:

圖02:在主窗體中實現對MDI窗體的水平平鋪操做,點擊小圖放大

  (5)實現對MDI窗體的垂直平鋪:
  要在主窗體實現MDI窗體垂直平鋪,也是經過LayoutMdi方法,此時所帶的參數是MdiLayout.TileVertical,具體實現語句以下:
this.LayoutMdi ( MdiLayout.TileVertical ) ;//實現對主窗體中的MDI窗體的垂直平鋪操做
 
實現操做後具體以下圖:
圖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 ) ;
  }

  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窗體顯示出來
  }

  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仍是至關比較簡單的。

不過說實如今我不建議你們這樣實現了,而是喜歡使用Tabcontrol的方法,這樣容易控件,並且能夠達到多任務,多操做的效果,也是目前幾乎全部瀏覽器都採用的方法 服務器

 
出處:http://www.sufeinet.com/thread-1364-1-1.html
http://www.xin3721.com/ArticlePrograme/C_biancheng/1966.html
相關文章
相關標籤/搜索