zoukankan      html  css  js  c++  java
  • 使用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函数中。


      (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,具体实现语句如下:
    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
  • 相关阅读:
    Many Equal Substrings CF
    Seek the Name, Seek the Fame POJ
    人人都是好朋友(离散化 + 并查集)
    建设道路
    day_30
    day_29作业
    day_29
    day_28
    day_27
    day_26作业
  • 原文地址:https://www.cnblogs.com/mq0036/p/6298420.html
Copyright © 2011-2022 走看看