csharp:winform

WinForm 窗体与控件开发详解

本章节详细讲解 C# WinForm 开发中窗体(Form)的基础操作、属性设置、MDI 多窗体应用、窗体继承以及常用控件的使用。

WinForm 是 Windows 窗体应用程序的核心。

  • 添加与删除:在项目中右键 → 添加 → Windows 窗体;右键窗体文件 → 删除。
  • 运行第一个窗体:在 `Program.cs` 中设置 `Application.Run(new Form1());`。

①-0:窗体的显示与隐藏

// 打开窗口
Form2 form2 = new Form2();
form2.Show(); // 显示窗体
 
// 隐藏窗口 (haɪ d)
// 隐藏当前窗体,但不会关闭它。窗体仍在内存中,可再次调用 Show() 显示。
this.Hide();
 
// 关闭窗口
// 关闭当前窗体并释放资源。内存移除,若需显示需重新 new 实例。
this.Close();

①-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 (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 / 修饰符) 改为 PublicProtected。 4. 重新生成项目。现在子窗体即可修改该控件属性。

  • 分类与命名:建议使用规范命名(如 `btnSubmit`, `lblTitle`)以便阅读。
  • 锁定位置:属性 `Locked` 设置为 `True`,防止误拖动。
  • 显示与隐藏:控制属性 `Visible` (`True`/`False`)。

常用快捷键绑定

功能 属性设置位置 说明
回车键触发 窗体属性 `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 富文本框 支持格式化文本(颜色、字体)的输入与显示。

该主题尚不存在

您访问的页面并不存在。如果允许,您可以使用创建该页面按钮来创建它。

  • csharp/winform.txt
  • 最后更改: 2025/11/27 13:23
  • 张叶安