手动添加控件#
来源:
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() |
必须,否则不显示 |
💡 动态控件的位置是相对容器左上角计算的,与设计器里拖拽的效果一致。