本章节详细讲解 C# WinForm 开发中窗体(Form)的基础操作、属性设置、MDI 多窗体应用、窗体继承以及常用控件的使用。
WinForm 是 Windows 窗体应用程序的核心。
// 打开窗口 Form2 form2 = new Form2(); form2.Show(); // 显示窗体 // 隐藏窗口 (haɪ d) // 隐藏当前窗体,但不会关闭它。窗体仍在内存中,可再次调用 Show() 显示。 this.Hide(); // 关闭窗口 // 关闭当前窗体并释放资源。内存移除,若需显示需重新 new 实例。 this.Close();
| 属性名 | 说明 | 常用值/备注 |
| Icon | 窗体图标 | 用于更换左上角图标 |
| FormBorderStyle | 边框样式 | 可用于隐藏标题栏或禁止调整大小 |
| StartPosition | 开始显示位置 | Manual: 手动<br>CenterScreen: 屏幕居中 (sen tə)<br>WindowsDefaultLocation: Windows默认位置<br>CenterParent: 父窗体居中 |
| Size | 窗体大小 | (saɪz) 可通过代码设置或鼠标拉伸 |
| BackgroundImage | 背景图片 | (bækɡ raʊn d ɪ mɪdʒ) |
| BackgroundImageLayout | 背景布局 | None: 无 (nʌn)<br>Tile: 平铺<br>Center: 居中<br>Stretch: 拉伸/铺满 (s tre tʃ)<br>Zoom: 按比例缩放 (zuːm) |
可以通过双击窗体或属性面板的“闪电”图标添加事件。
MDI (Multiple Document Interface) 允许在一个主窗体(父窗体)内部打开多个子窗体。
1. 父窗体设置: 将主窗体的属性 `IsMdiContainer` 设置为 `true`。
备注:kənˈteɪ nə (容器)
2. 子窗体设置: 在代码中打开子窗体时,必须指定其 `MdiParent` 属性。
private void Form1_Load(object sender, EventArgs e) { MDI_1 mdi_1 = new MDI_1(); mdi_1.MdiParent = this; // 关键:设置父容器为当前窗体 mdi_1.Show(); // 可以打开多个子窗体 MDI_2 mdi_2 = new MDI_2(); mdi_2.MdiParent = this; mdi_2.Show(); }
使用 `LayoutMdi` 方法来自动排列子窗体。
| 排列方式 | 枚举值 | 说明 |
| 水平平铺 | `MdiLayout.TileHorizontal` | (taɪl hɒrɪˈzɒntl) |
| 垂直平铺 | `MdiLayout.TileVertical` | (taɪl vɜːtɪ kl) |
| 层叠排列 | `MdiLayout.Cascade` | (kæˈskeɪd) |
代码示例:
// 水平平铺 private void 水平平铺ToolStripMenuItem_Click(object sender, EventArgs e) { this.LayoutMdi(MdiLayout.TileHorizontal); } // 层叠 private void 叠层ToolStripMenuItem_Click(object sender, EventArgs e) { this.LayoutMdi(MdiLayout.Cascade); }
Inherit (ɪnˈhe rɪ t)。
白话解释:类似 HMI 的底层窗口。把底层窗口(基类)当作公共模板,其他窗口继承它之后,天然拥有基类的所有控件和代码,实现复用。
方法一:编程方式(推荐) 修改代码中的继承关系。
// 原代码 public partial class Form_Param : Form { ... } // 修改后:让 Form_Param 继承自 Form_MAX public partial class Form_Param : Form_MAX { ... }
效果:Form_Param 窗体中将自动出现 Form_MAX 中的所有内容。
方法二:选择器方式 项目 → 添加新项 → Windows Forms → 继承的窗体 → 选择基类窗体。
默认情况下,基类窗体中的控件在子窗体中是锁定的(灰色,不可编辑)。
解决方法: 1. 打开基类窗体(父窗体)的设计器。 2. 选中要开放修改权限的控件。 3. 将属性 Modifiers (mɒ dɪ faɪ z / 修饰符) 改为 Public 或 Protected。 4. 重新生成项目。现在子窗体即可修改该控件属性。
常用快捷键绑定:
| 功能 | 属性设置位置 | 说明 |
| 回车键触发 | 窗体属性 `AcceptButton` | 用户按 Enter 键等于点击了指定的按钮 |
| ESC键触发 | 窗体属性 `CancelButton` | 用户按 Esc 键等于点击了指定的按钮 |
// 代码方式设置快捷键绑定 private void MAX_Load(object sender, EventArgs e) { this.AcceptButton = button1; // 回车触发 button1 this.CancelButton = button2; // ESC触发 button2 }
| 控件名称 | 中文名 | 用途 |
| Label | 标签 | 用于显示文本信息,用户不可编辑。 |
| Button | 按钮 | 用于触发点击事件。 |
| TextBox | 文本框 | 最常用的文本输入控件。 |
| RichTextBox | 富文本框 | 支持格式化文本(颜色、字体)的输入与显示。 |