显示页面讨论反向链接回到顶部 本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。 ====== WinForm 窗体与控件开发详解 ====== 本章节详细讲解 C# WinForm 开发中窗体(Form)的基础操作、属性设置、MDI 多窗体应用、窗体继承以及常用控件的使用。 ===== Form 窗体基础 ===== ==== 窗体概念与基本操作 ==== WinForm 是 Windows 窗体应用程序的核心。 * **添加与删除**:在项目中右键 -> 添加 -> Windows 窗体;右键窗体文件 -> 删除。 * **运行第一个窗体**:在 `Program.cs` 中设置 `Application.Run(new Form1());`。 ==== 窗体的常用属性 ==== === ①-0:窗体的显示与隐藏 === <code csharp> // 打开窗口 Form2 form2 = new Form2(); form2.Show(); // 显示窗体 // 隐藏窗口 (haɪ d) // 隐藏当前窗体,但不会关闭它。窗体仍在内存中,可再次调用 Show() 显示。 this.Hide(); // 关闭窗口 // 关闭当前窗体并释放资源。内存移除,若需显示需重新 new 实例。 this.Close(); </code> === ①-1 ~ ①-5:外观与布局属性 === | 属性名 | 说明 | 常用值/备注 | | **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) | ==== 窗体的常用事件 ==== 可以通过双击窗体或属性面板的“闪电”图标添加事件。 * **Click**:单击事件。当鼠标单击窗体空白处时触发。 * **Load** (ləʊd):加载事件。当窗体初始化并准备显示时触发(常用于数据初始化)。 * **FormClosing** (Kləʊ zɪŋ):关闭事件。当窗体即将关闭时触发(常用于确认提示或资源释放)。 ===== MDI 窗体 (多文档界面) ===== ==== ①-0:简介 ==== MDI (Multiple Document Interface) 允许在一个主窗体(父窗体)内部打开多个子窗体。 ==== ①-1 & ①-2:父子窗体设置 ==== **1. 父窗体设置**: 将主窗体的属性 `IsMdiContainer` 设置为 `true`。 > 备注:kənˈteɪ nə (容器) **2. 子窗体设置**: 在代码中打开子窗体时,必须指定其 `MdiParent` 属性。 <code csharp> 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(); } </code> ==== ①-3 & ①-4:MDI 窗体排列布局 ==== 使用 `LayoutMdi` 方法来自动排列子窗体。 | 排列方式 | 枚举值 | 说明 | | **水平平铺** | `MdiLayout.TileHorizontal` | (taɪl hɒrɪˈzɒntl) | | **垂直平铺** | `MdiLayout.TileVertical` | (taɪl vɜːtɪ kl) | | **层叠排列** | `MdiLayout.Cascade` | (kæˈskeɪd) | **代码示例**: <code csharp> // 水平平铺 private void 水平平铺ToolStripMenuItem_Click(object sender, EventArgs e) { this.LayoutMdi(MdiLayout.TileHorizontal); } // 层叠 private void 叠层ToolStripMenuItem_Click(object sender, EventArgs e) { this.LayoutMdi(MdiLayout.Cascade); } </code> ===== 继承窗体 (Inherit Form) ===== ==== ①-1:概念 ==== **Inherit** (ɪnˈhe rɪ t)。 > **白话解释**:类似 HMI 的底层窗口。把底层窗口(基类)当作公共模板,其他窗口继承它之后,天然拥有基类的所有控件和代码,实现复用。 ==== ①-2:创建继承窗体 ==== **方法一:编程方式(推荐)** 修改代码中的继承关系。 <code csharp> // 原代码 public partial class Form_Param : Form { ... } // 修改后:让 Form_Param 继承自 Form_MAX public partial class Form_Param : Form_MAX { ... } </code> > 效果:Form_Param 窗体中将自动出现 Form_MAX 中的所有内容。 **方法二:选择器方式** 项目 -> 添加新项 -> Windows Forms -> 继承的窗体 -> 选择基类窗体。 ==== ①-3:修改继承控件的属性 ==== 默认情况下,基类窗体中的控件在子窗体中是**锁定**的(灰色,不可编辑)。 **解决方法**: 1. 打开基类窗体(父窗体)的设计器。 2. 选中要开放修改权限的控件。 3. 将属性 **Modifiers** (mɒ dɪ faɪ z / 修饰符) 改为 **Public** 或 **Protected**。 4. 重新生成项目。现在子窗体即可修改该控件属性。 ===== WinForm 控件 ===== ==== 控件基本常识 ==== * **分类与命名**:建议使用规范命名(如 `btnSubmit`, `lblTitle`)以便阅读。 * **锁定位置**:属性 `Locked` 设置为 `True`,防止误拖动。 * **显示与隐藏**:控制属性 `Visible` (`True`/`False`)。 **常用快捷键绑定**: | 功能 | 属性设置位置 | 说明 | | **回车键触发** | 窗体属性 `AcceptButton` | 用户按 Enter 键等于点击了指定的按钮 | | **ESC键触发** | 窗体属性 `CancelButton` | 用户按 Esc 键等于点击了指定的按钮 | <code csharp> // 代码方式设置快捷键绑定 private void MAX_Load(object sender, EventArgs e) { this.AcceptButton = button1; // 回车触发 button1 this.CancelButton = button2; // ESC触发 button2 } </code> ==== 常用文本控件 ==== | 控件名称 | 中文名 | 用途 | | **Label** | 标签 | 用于显示文本信息,用户不可编辑。 | | **Button** | 按钮 | 用于触发点击事件。 | | **TextBox** | 文本框 | 最常用的文本输入控件。 | | **RichTextBox** | 富文本框 | 支持格式化文本(颜色、字体)的输入与显示。 | 登录 Detach Close 该主题尚不存在 您访问的页面并不存在。如果允许,您可以使用创建该页面按钮来创建它。 csharp/winform.txt 最后更改: 2025/11/27 13:23由 张叶安 登录