精华内容
下载资源
问答
  • C#MDI窗体避免重复打开子窗体的问题
    2019-04-20 12:14:15

    在做winform程序的时候,需要用到MDI窗体,在网上看了一些避免子窗体重复打开的问题。

    现在我有一个MDI窗体formfather以及两个子窗体form1和form2。
    在父窗体上弄两个按钮,点击按钮1的时候显示form1,点击按钮2的时候显示form2,再一次点击的时候显示form1,而不是一个新的form1。
    下面是我的代码

    private void toolStripButton1_Click(object sender, EventArgs e)
            {
    			Form1 f1 = new Form1();
                bool isOpened = false;//定义子窗体打开标记,默认值为false
                foreach (Form f in this.MdiChildren)//循环MDI中的所有子窗体
                {
                     if (f1.Name == f.Name)//若该子窗体已被打开
                     {
                          f.Activate();//激活该窗体
                          isOpened = true;//设置子窗体的打开标记为true
                          f1.Dispose();//销毁formChild实例
                          break;
                     }
                }
                if (!isOpened)//若该子窗体未打开,则显示该子窗体
                {
                    f1.MdiParent = this;
                    f1.FormBorderStyle = FormBorderStyle.None;//设置子窗体无边框
                    f1.Dock = DockStyle.Fill;//设置子窗体填满MDI窗体
                    f1.Show();
          }
    
    private void toolStripButton2_Click(object sender, EventArgs e)
            {
                Form2 df = new Form2 ();
               
                bool isOpened = false;//定义子窗体打开标记,默认值为false
                foreach (Form f in this.MdiChildren)//循环MDI中的所有子窗体
                {
                    if (df.Name == f.Name)//若该子窗体已被打开
                    {
                        f.Activate();//激活该窗体
                        isOpened = true;//设置子窗体的打开标记为true
                        df.Dispose();//销毁formChild实例
                        break;
                    }
                }
                if (!isOpened)//若该子窗体未打开,则显示该子窗体
                {
                    df.MdiParent = this;
                    df.FormBorderStyle = FormBorderStyle.None;
                    df.Dock = DockStyle.Fill;
                    df.Show();
                }
            }
    

    看别人的代码在代码块写激活窗体时用的是f1.Activate,这样是无法成功再次激活得窗体的,后来想了下,可能因为f1是new的窗体,而我们要打开的应该是已经是已经存在的f1窗体,即是我们foreach到的f窗体才是。

    自己的想法,不知道对不对,记录在此供自己以后查看,也希望大家指正

    更多相关内容
  • C# MDI窗体

    千次阅读 2019-06-12 16:55:34
    MDI (Multiple Document Interface) 窗体被称为多文档窗体,它是很多 Windows 应用程序中常用的界面设计。 在一个窗体中打开另一个窗体的方式可以通过设置 MDI 窗体的方式实现。 MDI 窗体的设置并不复杂,只需要...

             MDI (Multiple Document Interface) 窗体被称为多文档窗体,它是很多 Windows 应用程序中常用的界面设计。

    在一个窗体中打开另一个窗体的方式可以通过设置 MDI 窗体的方式实现。

            MDI 窗体的设置并不复杂,只需要将窗体的属性 IsMdiContainer 设置为 True 即可。

             在窗体加载事件 Load 中设置窗体为 MDI 窗体,代码如下。

    this.IsMdiContainer = True;

            在 MDI 窗体中,弹出窗体的代码与直接弹出窗体有些不同,

    在使用 Show 方法显示窗体前需要使用窗体的 MdiParent 设置显示当前窗体的父窗体,实现的代码如下:

    Test t = new Test();
    t.MdiParent = this;  //this:当前窗体
    t.Show();

                

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace WindowsForm
    {
        public partial class MDI : Form
        {
            public MDI()
            {
                InitializeComponent();
                //MDI窗体的设置:将窗体的属性IsMdiContainer设置为True
                this.IsMdiContainer = true;
            }
    
            //打开文件菜单项的单击事件
            private void 打开文件ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                //MDI弹出窗体:需要使用窗体的MdiParent设置当前窗体的父窗体
                OpenFile file = new OpenFile();
                file.MdiParent = this;
                file.Show();          
            }
    
            //保存文件菜单项单击事件
            private void 保存文件ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                SaveFile save = new SaveFile();
                save.MdiParent = this;
                save.Show();
            }
        }
    }
    

                                                  

    展开全文
  • 主要介绍了C#实现更改MDI窗体背景颜色的方法,涉及C#窗体背景色的设置技巧,非常简单实用,需要的朋友可以参考下
  • C# MDI窗体的设置

    2021-04-13 11:19:32
    在 Windows 窗体应用程序中,经常会在一个窗体中打开另一个窗体, 通过窗体上的不同菜单选择不同的操作,这种在一个窗体中打开另一个窗体的方式可以通过设置 MDI 窗体的... //MDI窗体指的是多文档窗体 private void

    在 Windows 窗体应用程序中,经常会在一个窗体中打开另一个窗体, 通过窗体上的不同菜单选择不同的操作,这种在一个窗体中打开另一个窗体的方式可以通过设置 MDI 窗体的方式实现。

    MDI (Multiple Document Interface) 窗体被称为多文档窗体,它是很多 Windows 应用程序中常用的界面设计。

    MDI 窗体的设置并不复杂,只需要将窗体的属性 IsMdiContainer 设置为 True 即可。

               //MDI窗体指的是多文档窗体
    
    private void 保存数据ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                //MDI窗体指的是多文档窗体
                //本实验中Form1是父窗体  form2是子窗体
                //首先将Form1的IsMDIContainer属性改为true,则该窗体为父窗体
                //为便于显示子窗体  最好将父窗体的WindowState属性改为Maxmized
                Form2 f2 = new Form2();
                f2.MdiParent = this;//设置Form2的父窗体是Form1
                AddTabFormPage(tcpage,f2);//将f2子窗体嵌入到 form1 主窗体的 tabcontrol选项卡中           
            }
      public void AddTabFormPage(TabControl tab, Form form)
            {
                form.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
                form.TopLevel = false;//设置子窗体是非顶级窗体
                form.Dock = DockStyle.Fill;//填满页面
                form.WindowState = FormWindowState.Maximized;//最大化
                TabPage page = new TabPage();//实例化tabcontrol选项卡
                page.Controls.Add(form);//在tabcontrol选项卡中  添加 子窗体
                page.Name = form.Name;
                page.Text = form.Text;
                page.Width = form.Width;
                page.Height = form.Height;
                tab.TabPages.Add(page);
                form.Show();
            }      
    
    

    以下是主窗体子窗体以及效果
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    展开全文
  • C#开发时,在MDI窗体上直接放置控件后,默认情况下,其中的子窗体会在控件后方显示。这个源码本人多个程序中都有使用到,可以在MDI窗体上放置控件。 其他语言开发通过分析代码,亦有借鉴价值。
  • 自己做项目需要的功能,实现了MDI窗体内部控件随MDI窗体大小的改变自动缩放,解决了最小化,最大化,控件不会丢失的问题!vs2008环境
  • C#MDI窗体实现多窗口效果

    千次阅读 2015-03-18 16:06:49
    C#MDI窗体实现多窗口效果  Visual C#是微软公司推出的下一代主流程序开发语言,他也是一种功能十分强大的程 序设计语言,正在受到越来越多的编程人员的喜欢。在Visual C#中,提供了为实现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编程,具体实现语句如下:
      this.IsMdiContainer = true ;
      (2)在主窗体上面新建一个MDI窗体。在程序中,新建一个MDI窗体的命令是通过一个菜单的事件来实现的。在处理新建一个MDI窗体事件中,关键是要设定此MDI窗体的父窗体。其实MDI窗体和别的窗体没有什么不同,不同点就在MDI窗体有上一级窗体,即父窗体,而其他窗体是没有的,具体实现语句如下:
    [C#] 纯文本查看 复制代码
    ?
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    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,具体实现语句如下:
    [C#] 纯文本查看 复制代码
    ?
    01
    02
    03
    04
    05
    private void Cascade_Click ( object sender , EventArgs e )
       //实现对主窗体中的MDI窗体的层叠操作
      {
       this .LayoutMdi ( MdiLayout.Cascade ) ;
      }

      实现操作后具体如下图:

    3297479352167119773.jpg.gif (17.55 KB, 下载次数: 39)

    下载附件

    2012-11-23 10:11 上传


    图01:在主窗体中实现对MDI窗体的层叠操作,点击小图放大
      (4)实现对MDI窗体的水平平铺:
      要在主窗体实现MDI窗体水平平铺,也是通过LayoutMdi方法,此时所带的参数是MdiLayout.TileHorizontal,具体实现语句如下:
    [C#] 纯文本查看 复制代码
    ?
    01
    02
    03
    04
    05
    private void TileH_Click ( object sender , EventArgs e )
       //实现对主窗体中的MDI窗体的水平平铺操作
      {
       this .LayoutMdi ( MdiLayout.TileHorizontal ) ;
      }
    实现操作后具体如下图:

    3297479352167119774.jpg.gif (14.2 KB, 下载次数: 33)

    下载附件

    2012-11-23 10:11 上传

    C实现MDI——多文档窗口 - adxlong - Python与Ubuntu
    图02:在主窗体中实现对MDI窗体的水平平铺操作,点击小图放大
      (5)实现对MDI窗体的垂直平铺:
      要在主窗体实现MDI窗体垂直平铺,也是通过LayoutMdi方法,此时所带的参数是MdiLayout.TileVertical,具体实现语句如下:
     
    [C#] 纯文本查看 复制代码
    ?
    01
    02
    03
    04
    05
    private void TileV_Click ( object sender , EventArgs e )
       //实现对主窗体中的MDI窗体的垂直平铺操作
      {
       this .LayoutMdi ( MdiLayout.TileVertical ) ;
      }
    实现操作后具体如下图:

    3297479352167119775.jpg.gif (11.66 KB, 下载次数: 55)

    下载附件

    2012-11-23 10:11 上传


    C实现MDI——多文档窗口 - adxlong - Python与Ubuntu
    图03:在主窗体中实现对MDI窗体的垂直平铺操作,点击小图放大
      (6)在有些MDI程序,当新建一个MDI窗体以后,往往会在某些菜单项的下面生产一个以此MDI窗体的名称为名称的子菜单项。在其他语言中要实现这种功能,可能就要在某些主菜单项下动态的加入子菜单了。但是在Visual C#中实现此种功能,就显得比较简单的,只有在要加入的主菜单项下加入下面一句程序就可以了:
      WindowMenu.MdiList = true ;本程序中,是在"窗口"主菜单项下面加入MDI窗体的子菜单项的。加入此语句后,程序运行界面具体如下图:
    C实现MDI——多文档窗口 - adxlong - Python与Ubuntu
    图04:在主窗体中实现在新建一个MDI窗体后会在此主菜单项下显示存在的MDI窗体菜单项
      点击小图放大

    3297479352167119776.jpg.gif (14.06 KB, 下载次数: 28)

    下载附件

    2012-11-23 10:11 上传


      三.程序源代码(mdi.cs)及编译方法:
      通过对程序设计中的难点介绍以后,就可以比较容易得到实现对上述MDI窗体处理的源程序代码(mdi.cs),具体如下:
      mdi.cs源程序代码:
     
    [C#] 纯文本查看 复制代码
    ?
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    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还是相当比较简单的。

    不过说实现在我不建议大家这样实现了,而是
    展开全文
  • 最近在做项目的时候,发现MDI窗体的主菜单的左边,当子窗体最大化的时候,显示了子窗体的图标ICON。
  • 实现MDI窗体的的单个子窗体显示,单个子窗体的切换
  • C#Mdi窗体,初学者实例
  • c# mdi窗体实现

    2014-10-23 08:19:23
    c# 实现mdi窗体 主要代码: 屏蔽最大最小化 和 窗体icon 处理 菜单项的ItemAdded
  • C#MDI窗体编程

    2012-05-06 15:34:56
    多文档界面(MDI)应用程序。MDI允许创建在单个容器窗体中包含多个窗体的应用程序,它一般包括三个部分。
  • MDI窗体是指在父窗体中创建子窗体,且子窗体不能离开父窗体: 首先,为这个工程文件添加子窗体:右键工程名->添加->Windows窗体 添加了三个子窗体Form2,Form3,Form4: 再确定父窗体:该确认的父窗体的...
  • 可以通过此示例,学习MDI窗体的使用,以及各种窗体布置,包括: 1.垂直分布;2.水平分布;3.层叠分布
  • C#MDI窗体

    2019-08-04 20:29:19
    原文https://blog.csdn.net/qq_36750158/article/details/79821585
  • C# 中的MDI 窗体

    千次阅读 2017-07-31 21:00:13
    SDI 窗体 (Single - document - interface) 正常创建出来的窗体 MDI 窗体 (multiple - document - interface 多文档界面),...MDI窗体的使用方法 确定一个副窗体,把窗体的IsMdiContainer属性设置为true。 创建
  • #1 DOCK属性的的顺序,本文以FILL为例 如果DOCK属性设置时的语句放置在设置父窗体之前,则最终无法正确显示。 private void MainForm_Load(object sender, EventArgs e) ... //设置主窗体为MDI窗体 ...
  • 目前类库只有窗体,没有其他控件,但窗体支持MDI。带两个示例程序,一个多标签浏览器,一个可运行时更换主题的普通窗体。代码仅用于学习和技术交流之用。
  • c#MDI窗体打开子窗体,一般都会出现子窗体的标题栏,一般方法都是合并在MDI菜单栏中,该方法无需借助MDI菜单栏,直接隐藏子窗体标题栏
  • C#创建MDI窗体实例

    2016-02-28 17:08:18
    MDI窗体的创建,窗体的排列,不通子窗体之间的切换
  • /// /// c# 进程窗口显示并前置 /// public static void RaiseOtherProcess() { Process proc = Process.GetCurrentProcess(); Process.GetProcesses(); foreach (Process otherProc in Process.GetProcessesByName...
  • 摘要:C#源码,菜单窗体,多窗口,MDI 一个C#多窗口应用程序窗口,演示 MDI form多窗口模式的实现原理,代码完整,有VS环境的自己重新编译生成下,特别适合C#基础入门者。 运行环境:Visual Studio2010
  • MDI窗体默认是可以重复打开i子窗体的,而我们可以通过如下方法禁止重复打开子窗窗体 打开子窗体的函数: private void OpenChildForm(Form formChild)//formChild只是是实例化的但既没有设置为父窗体的子窗体也...
  • C# MDI窗体记事本

    2020-07-14 16:34:07
    实现了Windows记事本的大部分功能,可修改字体大小粗细及颜色,选择文字对齐方式,字数统计等
  • C#-MDI窗体教学提纲.ppt

    2020-04-17 22:41:46
    李德奇 主编 第二十五讲 MDI窗体设计 大连理工大学出版社 教学目标 理解MDI窗体的...完成MDI窗体实例的程序编写 教学内容 一MDI窗体的特性 二MDI窗体的设计过程 三MDI窗体的菜单处理 四MDI窗体的显示控制 MDI窗体设计
  • if (e.CloseReason == CloseReason.MdiFormClosing)//判断点击的是父窗体还是子窗体 { } else if (e.CloseReason == CloseReason.UserClosing) { e.Cancel = true; MessageBox.Show(“无法进行关闭”); } ...
  • MDI窗体C#源代码

    2013-08-16 11:05:33
    动态生成子窗体并排序 代码开放 对学习窗体有帮助的
  • WinForm——MDI窗体

    千次阅读 2020-04-20 13:36:07
    MDI窗体由一个父窗体和若干个子窗体组成。MDI窗体允许同时显示多个窗体,他常包括含有子菜单的“窗口”菜单项,该菜单项用于在窗口之间进行切换。 MDI 窗体的设置并不复杂,只需要将窗体的属性 IsMdiContainer 设置...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,565
精华内容 1,026
关键字:

c# mdi窗体

c# 订阅
友情链接: ljwshr-bluepy-master.zip