创建WinForm项目(VS2015 / .NET 4.5 / C#)
创建项目步骤
- 打开 Visual Studio 2015
- 文件 → 新建 → 项目
- 左侧模板中选择 Visual C# → Windows
- 右侧选择 Windows 窗体应用程序
- 填写项目名称,选择 .NET Framework 4.5
- 点击确定
项目结构说明
创建完成后,默认生成以下关键文件:
| 文件 | 作用 |
|---|---|
Program.cs | 程序入口,包含 Main 方法 |
Form1.cs | 主窗体代码文件 |
Form1.Designer.cs | 窗体设计器自动生成的代码 |
Form1.resx | 窗体资源文件 |
WinForm程序是怎么运行的
程序的入口在 Program.cs 中:
using System;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}Code language: JavaScript (javascript)
运行流程如下:
Main方法是程序的入口点[STAThread]特性标记主线程为单线程单元,这是 COM 组件(如剪贴板、文件对话框)的要求Application.EnableVisualStyles()启用操作系统视觉样式(如XP风格按钮)Application.SetCompatibleTextRenderingDefault(false)设置文本渲染方式Application.Run(new Form1())创建主窗体实例并启动消息循环
Application.Run() 是核心:
- 创建
Form1窗体对象 - 显示窗体
- 进入 消息循环(Message Loop),等待并处理 Windows 消息(鼠标点击、键盘输入、重绘等)
- 当主窗体关闭时,消息循环结束,
Main方法返回,程序退出
消息循环的本质
Windows 程序是基于消息驱动的。简化逻辑如下:
// 伪代码,描述消息循环的本质
while (GetMessage(out msg, IntPtr.Zero, 0, 0))
{
TranslateMessage(ref msg);
DispatchMessage(ref msg); // 分发消息到对应的窗体/控件
}Code language: JavaScript (javascript)
每个 WinForm 控件本质上都是一个窗口(Window),通过窗口过程(WndProc)处理消息:
protected override void WndProc(ref Message m)
{
// 处理窗口消息
base.WndProc(ref m);
}Code language: JavaScript (javascript)
窗体生命周期
构造函数 → Load事件 → 显示 → 用户交互 → FormClosing事件 → FormClosed事件 → 析构
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent(); // 初始化控件
}
private void Form1_Load(object sender, EventArgs e)
{
// 窗体加载时执行
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
// 窗体关闭前执行,可取消关闭
}
}
总结
WinForm 程序的运行本质:
Main方法是入口Application.Run()创建主窗体并启动消息循环- 消息循环不断从系统消息队列中取消息,分发到对应控件
- 控件通过事件机制响应消息(如
Click、KeyDown) - 主窗体关闭 → 消息循环退出 → 程序结束
Next: 控件的继承体系