一、动态创建控件 核心原理
1. 必背四步流程
WinForm 支持纯代码动态创建控件,所有控件创建统一遵循四步:
实例化对象:new 控件()
设置控件属性:文本、大小、位置、颜色、字体等
绑定控件事件:Lambda表达式 / 普通方法绑定
加载到窗体:this.Controls.Add(控件) (不添加不显示)
2. 基础核心知识点
-
所有控件本质都是C#类,可以new实例化
-
动态控件仅存在内存中,必须Add加入窗体集合才可可视化
-
控件事件支持多播委托:+=绑定、-=解绑
二、Label 标签控件(代码拆分 + 独立属性 + 特色功能)
1. 分步拆解代码(最细拆分)
将 Label 创建逻辑拆分为:实例化 → 样式属性 → 图片属性 → 加载显示
// 1. 实例化控件对象
Label l1 = new Label();
// 2. 设置文本、颜色、尺寸、位置基础属性
l1.Text = "good good study";
l1.ForeColor = Color.White;
l1.BackColor = Color.FromArgb(255, 0, 0);
l1.Size = new Size(100, 20);
l1.TextAlign = ContentAlignment.MiddleCenter;
l1.Location = new Point(200, 0);
// 3. 设置图片资源属性
l1.Image = Properties.Resources.background;
// 4. 添加到窗体显示
this.Controls.Add(l1);
2. Label 全套独立属性表
-
Text:标签展示文本内容
-
ForeColor:字体颜色,支持系统预设颜色
-
BackColor:背景颜色,支持ARGB带透明自定义颜色
-
Size:控件宽高尺寸,new Size(宽,高)
-
TextAlign:文本对齐方式,支持居中、居左、居右
-
Location:窗体坐标位置,new Point(X,Y)
-
Image:标签背景图片
3. 特色功能详解
(1)颜色两种赋值方式
-
系统预设颜色:Color.Red / Color.White
-
自定义ARGB颜色:Color.FromArgb(透明度,红,绿,蓝)
-
透明度区间:0(完全透明)~255(完全不透明)
(2)图片三种加载方式
-
绝对路径:本地固定路径,移植性差
-
相对路径:../ 返回上级目录,适配Debug运行目录
-
项目资源读取(推荐):Properties.Resources.图片名,无路径报错、可打包发布
三、TextBox 文本框控件(代码拆分 + 属性 + 方法 + 事件)
1. 分步拆解代码
拆分逻辑:字体定义 → 控件实例化赋值 → 方法调用 → 事件绑定 → 加载窗体
// 1. 实例化控件对象
Label l1 = new Label();
// 2. 设置文本、颜色、尺寸、位置基础属性
l1.Text = "good good study";
l1.ForeColor = Color.White;
l1.BackColor = Color.FromArgb(255, 0, 0);
l1.Size = new Size(100, 20);
l1.TextAlign = ContentAlignment.MiddleCenter;
l1.Location = new Point(200, 0);
// 3. 设置图片资源属性
l1.Image = Properties.Resources.background;
// 4. 添加到窗体显示
this.Controls.Add(l1);
2. TextBox 专属独立属性
-
Text:默认输入文本内容
-
Font:自定义字体、字号、样式(加粗/斜体)
-
Size:文本框宽高尺寸
-
Location:窗体XY坐标位置
-
TextAlign:文本水平对齐方式
-
MaxLength:限制最大输入字符数
-
PasswordChar:掩码字符,实现密码隐藏效果
3. TextBox 专属独立方法
-
Clear():清空文本框所有内容
-
Focus():让文本框主动获取焦点,默认激活输入状态
4. TextChanged 独立事件
触发时机:文本框内容每一次修改、输入、删除瞬间触发
常用场景:实时数据校验、实时字数统计、实时输入监听
四、Button 按钮控件(代码拆分 + 属性 + 多播事件 + sender)
1. 分步拆解代码
拆分逻辑:实例化属性赋值 → Lambda事件绑定 → 普通方法绑定 → 加载窗体
// 1. 实例化按钮并设置基础属性
Button btn = new Button()
{
Text = "OK",
Location = new Point(30, 100)
};
// 2. 绑定Lambda点击事件
btn.Click += (sender, e) =>
{
MessageBox.Show("我点击btn");
};
// 3. 绑定普通方法事件(多播叠加)
btn.Click += button1_Click;
// 4. 解绑事件(可选)
// btn.Click -= button1_Click;
// 5. 加载到窗体显示
this.Controls.Add(btn);
2. Button 专属独立属性
-
Text:按钮展示文字
-
Location:按钮在窗体的坐标位置
-
Enabled:按钮状态,true启用、false禁用置灰
3. 按钮核心事件(Click)
按钮默认核心事件:Click 单击事件
支持多播绑定:可同时绑定多个方法,按绑定顺序执行
4. sender 万能参数(独立考点)
private void button1_Click(object sender, EventArgs e)
{
// sender:代表当前触发事件的控件对象
label1.Text = ((Button)sender).Text;
}
-
作用:多个按钮共用同一个点击方法
-
原理:通过sender强转控件类型,识别当前点击的按钮
-
优势:极大减少冗余代码,代码高度复用
五、控件事件两种写法(独立总结)
设计器绑定:界面双击控件,自动生成默认事件方法(仅拖拽控件可用)
代码动态绑定:控件.事件 += 方法/Lambda(动态控件唯一绑定方式)
六、自定义控件事件(拓展复习)
除系统自带事件,可通过委托+事件自定义控件回调事件
// 1. 定义委托
public delegate void MyDel(int a);
// 2. 定义事件
public event MyDel Change;
// 3. 绑定事件 + 触发事件
Change += (a) =>
{
MessageBox.Show(a + "sssss");
};
Change.Invoke(10);
七、满分考点总结
-
动态控件四步:new实例 → 设属性 → 绑事件 → Add加载
-
Label 重点:ARGB透明颜色、图片三种加载方式
-
TextBox 重点:密码掩码、字数限制、文本实时监听
-
Button 重点:多播事件、sender参数复用事件方法
-
动态控件必须Add,否则内存存在、界面不显示
八、统一背诵口诀
-
动态控件四步走,新建属性事件凑
-
不Add不显示界面,内存存在看不见
-
三色ARGB可透明,资源图片最稳定
-
文本变时触发事件,按钮sender万能用
-
多播事件可叠加,加减符号控执行


