C#父窗体中创建子窗体,显示、排列子窗体

4543 世界杯吧 | 2025-05-29 19:35:10

目录

一、创建父窗体Form1

二、创建子窗体Form2,并在Form1中显示

1、首先在Form1.cs的Form1_Load()中增加代码段

2、其次还要修改Form1.Designer.cs的窗体设计生成器

(1)修改前

(2)修改后

(3)生成结果:在父窗体中打开所有子窗体

三、排列子窗体

1、先在Form1窗体中,添加一个MenuStip控件

2、窗体设计生成器内容的自动变化

3、激活控件菜单项的Click事件

(1)鼠标点击控件菜单项“水平平铺”

(2)鼠标依次点击控件菜单项“垂直平铺”、“层叠排列”

(3)添加点击事件属性

(4)运行生成

一、创建父窗体Form1

VS中选择C#的Windows窗体应用创建父窗体Form1,默认生成Program.cs、Form1.cs、Form1.Designer.cs三个C#文件,右键Form1.cs有两种显示模式,一种为查看代码Form1.cs,一种为查看设计器Form1.cs[设计]。查看设计器Form1.cs[设计],右键属性,把属性IsMdiContainer的值修改为True。

二、创建子窗体Form2,并在Form1中显示

1、首先在Form1.cs的Form1_Load()中增加代码段

在资源管理器中,右键项目(比如App1),添加窗体(Windows窗体),生成窗体Form2。

以此类推可以生成窗体Form3、Form4。

在父窗体Form1中实现加载Form1时自动加载子窗体Form2,需要在Form1.cs的Form1_Load()中增加代码段:

Form2 frm2 = new()

{

MdiParent = this

};

frm2.Show();

以此类推,可以自动加载子窗体Form3、Form4。

//在主窗体中创建子窗体,并在主窗体打开时自动加载子窗体

namespace App1

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)

{

Form2 frm2 = new()//自动加载Form2

{

MdiParent = this

};

frm2.Show();

Form3 frm3 = new()//自动加载Form3

{

MdiParent = this

};

frm3.Show();

Form4 frm4 = new()//自动加载Form4

{

MdiParent = this

};

frm4.Show();

}

}

}

2、其次还要修改Form1.Designer.cs的窗体设计生成器

(1)修改前

#region Windows Form Designer generated code

///

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

///

private void InitializeComponent()

{

SuspendLayout();

//

// Form1

//

AutoScaleDimensions = new SizeF(7F, 17F);

AutoScaleMode = AutoScaleMode.Font;

ClientSize = new Size(421, 393);

IsMdiContainer = true;

Name = "Form1";

Text = "Form1";

ResumeLayout(false);

}

#endregion

}

}

(2)修改后

#region Windows Form Designer generated code

///

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

///

private void InitializeComponent()

{

SuspendLayout();

//

// Form1

//

AutoScaleDimensions = new SizeF(7F, 17F);

AutoScaleMode = AutoScaleMode.Font;

ClientSize = new Size(421, 393);

IsMdiContainer = true;

Name = "Form1";

Text = "Form1";

Load += Form1_Load; //在父窗体中显示子窗体,增加

ResumeLayout(false);

}

#endregion

(3)生成结果:在父窗体中打开所有子窗体

三、排列子窗体

如果一个MDI窗体中有多个子窗体同时打开,假如不对其排列顺序进行调整,那么界面会非常混乱,而且不容易浏览。这时候,可以通过使用带有MdiLayout枚举的LayoutMdi()方法来排列多文档界面父窗体中的子窗体。

语法如下:

public void LayoutMdi(MdiLayout value)

value:是MdiLayout枚举值之一,用来定义MDI子窗体的布局。

MdiLayout枚举用于指定MDI父窗体中子窗体的布局,其格式:

public enum MdiLayout

MdiLayout的枚举成员如下表:

枚举成员说明Cascade所有子窗体均层叠在MDI父窗体工作区内TileHorizontal所有子窗体均水平平铺在MDI父窗体工作区内TileVertical所有子窗体均垂直平铺在MDI父窗体工作区内

在上述的实例中继续操作,在Form1窗体中,添加一个MenuStip控件用作该父窗体的菜单项。通过MenuStrip控件建立3个菜单项,分别为“水平平铺”、“垂直平铺”、“层叠排列”。运行程序时通过Form1_Load加载所有子窗体,通过“水平平铺”、“垂直平铺”、“层叠排列”对所有子窗体进行排列。

1、先在Form1窗体中,添加一个MenuStip控件

打开Form1.cs[设计]→视图→工具箱(或左侧边框的工具箱)→菜单和工具栏→MenuStip→用鼠标拖拽图标到Form1窗体上边框放下→依次根据提示编辑输入菜单项“水平平铺”、“垂直平铺”、“层叠排列”。(为了观察窗体设计生成器内容的变化,鼠标不要点击控件)

2、窗体设计生成器内容的自动变化

#region Windows Form Designer generated code

///

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

///

private void InitializeComponent()

{

menuStrip1 = new MenuStrip();

水平平铺ToolStripMenuItem = new ToolStripMenuItem();

垂直平铺ToolStripMenuItem = new ToolStripMenuItem();

层叠排列ToolStripMenuItem = new ToolStripMenuItem();

menuStrip1.SuspendLayout();

SuspendLayout();

//

// menuStrip1

//

menuStrip1.Items.AddRange(new ToolStripItem[] { 水平平铺ToolStripMenuItem, 垂直平铺ToolStripMenuItem, 层叠排列ToolStripMenuItem });

menuStrip1.Location = new Point(0, 0);

menuStrip1.Name = "menuStrip1";

menuStrip1.Size = new Size(484, 25);

menuStrip1.TabIndex = 1;

menuStrip1.Text = "menuStrip1";

//

// 水平平铺ToolStripMenuItem

//

水平平铺ToolStripMenuItem.Name = "水平平铺ToolStripMenuItem";

水平平铺ToolStripMenuItem.Size = new Size(68, 21);

水平平铺ToolStripMenuItem.Text = "水平平铺";

//

// 垂直平铺ToolStripMenuItem

//

垂直平铺ToolStripMenuItem.Name = "垂直平铺ToolStripMenuItem";

垂直平铺ToolStripMenuItem.Size = new Size(68, 21);

垂直平铺ToolStripMenuItem.Text = "垂直平铺";

//

// 层叠排列ToolStripMenuItem

//

层叠排列ToolStripMenuItem.Name = "层叠排列ToolStripMenuItem";

层叠排列ToolStripMenuItem.Size = new Size(68, 21);

层叠排列ToolStripMenuItem.Text = "层叠排列";

//

// Form1

//

AutoScaleDimensions = new SizeF(7F, 17F);

AutoScaleMode = AutoScaleMode.Font;

ClientSize = new Size(484, 461);

Controls.Add(menuStrip1);

IsMdiContainer = true;

MainMenuStrip = menuStrip1;

Name = "Form1";

SizeGripStyle = SizeGripStyle.Hide;

Text = "Form1";

Load += Form1_Load;

menuStrip1.ResumeLayout(false);

menuStrip1.PerformLayout();

ResumeLayout(false);

PerformLayout();

}

#endregion

private MenuStrip menuStrip1;

private ToolStripMenuItem 水平平铺ToolStripMenuItem;

private ToolStripMenuItem 垂直平铺ToolStripMenuItem;

private ToolStripMenuItem 层叠排列ToolStripMenuItem;

}

}

3、激活控件菜单项的Click事件

(1)鼠标点击控件菜单项“水平平铺”

观察窗体设计生成器自动新增内容和Form1.cs自动新增的内容。

//Form1.cs

namespace App3

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

//在Form1_Load()中显示所有子窗体

private void Form1_Load(object sender, EventArgs e)

{

Form2 frm2 = new()//自动加载Form2

{

MdiParent = this

};

frm2.Show();

Form3 frm3 = new()//自动加载Form3

{

MdiParent = this

};

frm3.Show();

Form4 frm4 = new()//自动加载Form4

{

MdiParent = this

};

frm4.Show();

}

//激活菜单项“水平平铺”的Click事件

private void 水平平铺ToolStripMenuItem_Click(object sender, EventArgs e)

{

}

}

}

//Form1.Designer.cs

namespace App3

{

partial class Form1

{

///

/// Required designer variable.

///

private System.ComponentModel.IContainer components = null;

///

/// Clean up any resources being used.

///

/// true if managed resources should be disposed; otherwise, false.

protected override void Dispose(bool disposing)

{

if (disposing && (components != null))

{

components.Dispose();

}

base.Dispose(disposing);

}

#region Windows Form Designer generated code

///

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

///

private void InitializeComponent()

{

menuStrip1 = new MenuStrip();

水平平铺ToolStripMenuItem = new ToolStripMenuItem();

垂直平铺ToolStripMenuItem = new ToolStripMenuItem();

层叠排列ToolStripMenuItem = new ToolStripMenuItem();

menuStrip1.SuspendLayout();

SuspendLayout();

//

// menuStrip1

//

menuStrip1.Items.AddRange(new ToolStripItem[] { 水平平铺ToolStripMenuItem, 垂直平铺ToolStripMenuItem, 层叠排列ToolStripMenuItem });

menuStrip1.Location = new Point(0, 0);

menuStrip1.Name = "menuStrip1";

menuStrip1.Size = new Size(484, 25);

menuStrip1.TabIndex = 1;

menuStrip1.Text = "menuStrip1";

//

// 水平平铺ToolStripMenuItem

//

水平平铺ToolStripMenuItem.Name = "水平平铺ToolStripMenuItem";

水平平铺ToolStripMenuItem.Size = new Size(68, 21);

水平平铺ToolStripMenuItem.Text = "水平平铺";

水平平铺ToolStripMenuItem.Click += 水平平铺ToolStripMenuItem_Click;

//

// 垂直平铺ToolStripMenuItem

//

垂直平铺ToolStripMenuItem.Name = "垂直平铺ToolStripMenuItem";

垂直平铺ToolStripMenuItem.Size = new Size(68, 21);

垂直平铺ToolStripMenuItem.Text = "垂直平铺";

//

// 层叠排列ToolStripMenuItem

//

层叠排列ToolStripMenuItem.Name = "层叠排列ToolStripMenuItem";

层叠排列ToolStripMenuItem.Size = new Size(68, 21);

层叠排列ToolStripMenuItem.Text = "层叠排列";

//

// Form1

//

AutoScaleDimensions = new SizeF(7F, 17F);

AutoScaleMode = AutoScaleMode.Font;

ClientSize = new Size(484, 461);

Controls.Add(menuStrip1);

IsMdiContainer = true;

MainMenuStrip = menuStrip1;

Name = "Form1";

SizeGripStyle = SizeGripStyle.Hide;

Text = "Form1";

Load += Form1_Load;

menuStrip1.ResumeLayout(false);

menuStrip1.PerformLayout();

ResumeLayout(false);

PerformLayout();

}

#endregion

private MenuStrip menuStrip1;

private ToolStripMenuItem 水平平铺ToolStripMenuItem;

private ToolStripMenuItem 垂直平铺ToolStripMenuItem;

private ToolStripMenuItem 层叠排列ToolStripMenuItem;

}

}

(2)鼠标依次点击控件菜单项“垂直平铺”、“层叠排列”

继续观察窗体设计生成器自动新增内容和Form1.cs自动新增的内容。

//Form1.cs

namespace App3

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

//在Form1_Load()中显示所有子窗体

private void Form1_Load(object sender, EventArgs e)

{

Form2 frm2 = new()//自动加载Form2

{

MdiParent = this

};

frm2.Show();

Form3 frm3 = new()//自动加载Form3

{

MdiParent = this

};

frm3.Show();

Form4 frm4 = new()//自动加载Form4

{

MdiParent = this

};

frm4.Show();

}

//激活菜单项“水平平铺”的Click事件

private void 水平平铺ToolStripMenuItem_Click(object sender, EventArgs e)

{

}

//激活菜单项“层叠排列”的Click事件

private void 层叠排列ToolStripMenuItem_Click(object sender, EventArgs e)

{

}

//激活菜单项“垂直平铺”的Click事件

private void 垂直平铺ToolStripMenuItem_Click(object sender, EventArgs e)

{

}

}

}

//Form1.Designer.cs

namespace App3

{

partial class Form1

{

///

/// Required designer variable.

///

private System.ComponentModel.IContainer components = null;

///

/// Clean up any resources being used.

///

/// true if managed resources should be disposed; otherwise, false.

protected override void Dispose(bool disposing)

{

if (disposing && (components != null))

{

components.Dispose();

}

base.Dispose(disposing);

}

#region Windows Form Designer generated code

///

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

///

private void InitializeComponent()

{

menuStrip1 = new MenuStrip();

水平平铺ToolStripMenuItem = new ToolStripMenuItem();

垂直平铺ToolStripMenuItem = new ToolStripMenuItem();

层叠排列ToolStripMenuItem = new ToolStripMenuItem();

menuStrip1.SuspendLayout();

SuspendLayout();

//

// menuStrip1

//

menuStrip1.Items.AddRange(new ToolStripItem[] { 水平平铺ToolStripMenuItem, 垂直平铺ToolStripMenuItem, 层叠排列ToolStripMenuItem });

menuStrip1.Location = new Point(0, 0);

menuStrip1.Name = "menuStrip1";

menuStrip1.Size = new Size(484, 25);

menuStrip1.TabIndex = 1;

menuStrip1.Text = "menuStrip1";

//

// 水平平铺ToolStripMenuItem

//

水平平铺ToolStripMenuItem.Name = "水平平铺ToolStripMenuItem";

水平平铺ToolStripMenuItem.Size = new Size(68, 21);

水平平铺ToolStripMenuItem.Text = "水平平铺";

水平平铺ToolStripMenuItem.Click += 水平平铺ToolStripMenuItem_Click; //激活点击事件

//

// 垂直平铺ToolStripMenuItem

//

垂直平铺ToolStripMenuItem.Name = "垂直平铺ToolStripMenuItem";

垂直平铺ToolStripMenuItem.Size = new Size(68, 21);

垂直平铺ToolStripMenuItem.Text = "垂直平铺";

垂直平铺ToolStripMenuItem.Click += 垂直平铺ToolStripMenuItem_Click; //激活点击事件

//

// 层叠排列ToolStripMenuItem

//

层叠排列ToolStripMenuItem.Name = "层叠排列ToolStripMenuItem";

层叠排列ToolStripMenuItem.Size = new Size(68, 21);

层叠排列ToolStripMenuItem.Text = "层叠排列";

层叠排列ToolStripMenuItem.Click += 层叠排列ToolStripMenuItem_Click; //激活点击事件

//

// Form1

//

AutoScaleDimensions = new SizeF(7F, 17F);

AutoScaleMode = AutoScaleMode.Font;

ClientSize = new Size(484, 461);

Controls.Add(menuStrip1);

IsMdiContainer = true;

MainMenuStrip = menuStrip1;

Name = "Form1";

SizeGripStyle = SizeGripStyle.Hide;

Text = "Form1";

Load += Form1_Load;

menuStrip1.ResumeLayout(false);

menuStrip1.PerformLayout();

ResumeLayout(false);

PerformLayout();

}

#endregion

private MenuStrip menuStrip1;

private ToolStripMenuItem 水平平铺ToolStripMenuItem;

private ToolStripMenuItem 垂直平铺ToolStripMenuItem;

private ToolStripMenuItem 层叠排列ToolStripMenuItem;

}

}

(3)添加点击事件属性

在Form1.cs中添加事件属性,从而完成点击控件后执行的操作。

//Form1.cs

namespace App3

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

//在Form1_Load()中显示所有子窗体

private void Form1_Load(object sender, EventArgs e)

{

Form2 frm2 = new()//自动加载Form2

{

MdiParent = this

};

frm2.Show();

Form3 frm3 = new()//自动加载Form3

{

MdiParent = this

};

frm3.Show();

Form4 frm4 = new()//自动加载Form4

{

MdiParent = this

};

frm4.Show();

}

//激活菜单项“水平平铺”的Click事件

private void 水平平铺ToolStripMenuItem_Click(object sender, EventArgs e)

{

LayoutMdi(MdiLayout.TileHorizontal); //添加点击事件的属性

}

//激活菜单项“层叠排列”的Click事件

private void 层叠排列ToolStripMenuItem_Click(object sender, EventArgs e)

{

LayoutMdi(MdiLayout.Cascade); //添加点击事件的属性

}

//激活菜单项“垂直平铺”的Click事件

private void 垂直平铺ToolStripMenuItem_Click(object sender, EventArgs e)

{

LayoutMdi(MdiLayout.TileVertical); //添加点击事件的属性

}

}

}

(4)运行生成