创建WinForm项目

创建WinForm项目(VS2015 / .NET 4.5 / C#)

创建项目步骤

  1. 打开 Visual Studio 2015
  2. 文件 → 新建 → 项目
  3. 左侧模板中选择 Visual C#​ → Windows
  4. 右侧选择 Windows 窗体应用程序
  5. 填写项目名称,选择 .NET Framework 4.5
  6. 点击确定

项目结构说明

创建完成后,默认生成以下关键文件:

文件作用
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)

运行流程如下:

  1. Main 方法是程序的入口点
  2. [STAThread] 特性标记主线程为单线程单元,这是 COM 组件(如剪贴板、文件对话框)的要求
  3. Application.EnableVisualStyles() 启用操作系统视觉样式(如XP风格按钮)
  4. Application.SetCompatibleTextRenderingDefault(false) 设置文本渲染方式
  5. 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)
  • 主窗体关闭 → 消息循环退出 → 程序结束

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注