一、MDI窗体设计

MDI窗体即多文档界面。用于同时显示多个文档,每个文档显示在各自的窗口中。

1、设置MDI窗体

在MDI窗体中,起到容器作用的窗口被称为“父窗体”,放到父窗体中的其他窗体被称为“子窗体”,也成为“MDI子窗体”。当MDI应用程序启动时,首先会显示父窗体。每个应用程序只能有一个父窗体,其他子窗体不能移除父窗体的框架区域。

父窗口设置:

 设置子窗体:

通过设置某个窗体的MdiParent属性来确定子窗体。

 //参数设置菜单栏
        private void 参数设置ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SetPara SetParaWin = new SetPara();//创建参数设置窗口对象
            SetParaWin.MdiParent = this;//设置当前窗体为父窗体
            SetParaWin.Show();//显示窗体
        }

这样设置之后发现子窗口不显示了,但其实是被父窗口的控件挡住了,解决方法如下,父窗口里加入以下语句。

using System.Runtime.InteropServices; 

  public partial class Form1 : Form
{
      [DllImport("user32")] 
      public static extern int SetParent(int children, int parent);//弹出子窗口
        //参数设置菜单栏
        private void 参数设置ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SetPara SetParaWin = new SetPara();//创建参数设置窗口对象
            SetParaWin.MdiParent = this;//设置当前窗体为父窗体
            SetParaWin.Show();//显示窗体
            SetParent((int)SetParaWin.Handle, (int)this.Handle);
        }
}

测试成功。

参考:https://blog.csdn.net/SugaryoTT/article/details/51345926#systemruntimeinteropservices

 user32.dll是Windows用户界面相关应用程序接口,用于包括Windows处理,基本用户界面等特性,如创建窗口和发送消息。

System.Runtime.InteropServices提供在窗体运行时的各种服务。

注意:使用System.Runtime.InteropServices和user32.dll不需要再额外添加引用,直接用语句应用即可。

2、排列MDI子窗体

当有多个子窗体同时打开,需要对其排列顺序进行调整。可以通过带有MdiLayout枚举的LayoutMdi方法排列多文档界面父窗体中的子窗体。

语法:public void LayoutMdi (LayoutMdi value)

子窗体排列

LayoutMdi(MdiLayout.TileHorizontal);//使用MdiLayout枚举实现窗体的垂直平铺
LayoutMdi(MdiLayout.TileVertical);//使用MdiLayout枚举实现窗体的垂直平铺
LayoutMdi(MdiLayout.Cascade);//使用MdiLayout枚举实现窗体的层叠平铺

3、窗体使用Show方法和ShowDialog方法显示窗体的区别

(1)使用Show方法:非模式窗体,如果有多个窗体,用户单击任何一个窗体,立即成为激活窗体并显示在屏幕的最前端。

(2)ShowDialog方法:模式窗体,它在显示时,如果作为激活窗体,则其他窗体不可用,只有在将模式窗体关闭之后,其他窗体才能恢复可用状态。

二、窗口的放大缩小关闭按钮的显示与隐藏

1、窗口的放大缩小关闭按钮的显示与隐藏

  InitializeComponent();
  this.ControlBox = true;   // 设置显示放大缩小关闭按钮

或者:

2、隐藏放大和缩小按钮

效果:

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐