跳转至

手动添加控件#

来源D:\study\C#1\WinForm\stu0810\手动添加控件\Form1.cs

不通过设计器拖拽,而是纯代码动态创建控件,适合动态生成界面(如动态列表、游戏场景等)。


1. 基本流程(三步)#

private void Form1_Load(object sender, EventArgs e)
{
    // 1. 创建要添加的控件的实例化对象
    Button btn1 = new Button();
    btn1.Text = "点击!";
    btn1.Location = new Point(100, 200);
    btn1.Size = new Size(100, 40);

    // 2. 绑定事件(可选)
    btn1.Click += Btn1_Click;

    // 3. 把当前这个实例化对象添加到容器中(this = 窗体)
    this.Controls.Add(btn1);
}

private void Btn1_Click(object sender, EventArgs e)
{
    MessageBox.Show("哈哈哈");
}

💡 最容易忘的一步:只 new 了控件但没有 Add 到容器,控件不会显示。

2. 添加到 Panel 容器#

Panel panel1 = new Panel();
panel1.Width = 300;
panel1.Height = 300;
panel1.Location = new Point(20, 20);
panel1.BorderStyle = BorderStyle.FixedSingle;   // 显示边框
this.Controls.Add(panel1);

// 把按钮添加到 Panel 中(而非窗体)
panel1.Controls.Add(btn1);

💡 Panel 有自己的 Controls 集合。控件加到哪个容器,就以哪个容器为坐标系原点。

3. 动态创建多个控件(批量)#

// 动态生成 10 个按钮,纵向排列
for (int i = 0; i < 10; i++)
{
    Button btn = new Button();
    btn.Text = "按钮" + (i + 1);
    btn.Location = new Point(20, 20 + i * 40);
    btn.Tag = i;                          // Tag 属性可以存任意附加数据
    btn.Click += Btn_Click;               // 所有按钮共用一个事件
    this.Controls.Add(btn);
}

// 通过 sender 区分是哪个按钮
private void Btn_Click(object sender, EventArgs e)
{
    Button btn = (Button)sender;
    MessageBox.Show($"点击了 {btn.Text},编号 {btn.Tag}");
}

4. 小结#

步骤 代码 说明
创建对象 new Button() 和普通对象一样
设置属性 Text / Location / Size 决定显示内容和位置
绑定事件 += 响应交互
加入容器 Controls.Add() 必须,否则不显示

💡 动态控件的位置是相对容器左上角计算的,与设计器里拖拽的效果一致。


相关笔记#