本文整理 WinForm 开发中常用的文本类、选择类、列表类控件知识点,包含核心属性、用法示例及实际应用场景,适用于基础阶段学习。
一、文本类控件(RichTextBox、MaskedTextBox)
文本类控件主要用于文本输入与展示,适配不同格式和规则的文本处理需求。
1. RichTextBox(富文本框)
支持多行文本和格式化内容,适用于长文本输入场景。
核心属性
Text:获取 / 设置控件中的纯文本内容。
Rtf:获取 / 设置 RTF 格式文本(支持字体、颜色等格式化)。
Multiline:是否支持多行文本(默认true)。
ScrollBars:滚动条类型(None/Horizontal/Vertical/Both,长文本建议用Vertical)。
MaxLength:限制输入最大字符数(默认无限制,工业场景常用 500-1000)。
常用方法
AppendText(string text):在现有文本后追加内容(如日志输出)。
Clear():清空所有文本。
用法示例(个人简介录入)
// 初始化富文本框
richTextBox1.ScrollBars = RichTextBoxScrollBars.Vertical; // 垂直滚动条
richTextBox1.MaxLength = 1000; // 限制最大输入1000字
richTextBox1.AppendText("请输入详细信息,支持换行...\n"); // 初始提示
// 读取输入内容
string intro = richTextBox1.Text.Trim();
- 应用场景:用户备注、设备操作日志、长文本说明等需多行 / 格式化文本的场景。
2. MaskedTextBox(掩码文本框)
强制用户按预设格式输入,避免无效格式,适用于固定格式文本录入。
核心作用:通过 “掩码” 约束输入格式(如电话、身份证、工号)。
核心属性
Mask:设置掩码格式(如"000-0000-0000"对应固定格式电话)。
Text:获取用户输入文本(包含掩码分隔符)。
MaskCompleted:判断是否完整输入掩码(true表示格式完整)。
常用掩码字符
0:必须输入数字(0-9)。
9:可选输入数字或空格。
#:可选输入数字、加号或减号。
L:必须输入字母(a-z, A-Z)。
\:转义字符(如-表示显示 “-” 符号)。
用法示例(工号输入)
// 工号格式:OP-2023-0001(前缀+年份+4位序号)
maskedTextBox1.Mask = "OP-0000-0000";
maskedTextBox1.PromptChar = '_'; // 未输入时显示下划线提示
// 验证并读取工号
if (maskedTextBox1.MaskCompleted)
{
string workNo = maskedTextBox1.Text; // 结果示例:"OP-2023-0001"
}
else
{
MessageBox.Show("请按格式输入工号(OP-年份-序号)");
}
- 应用场景:工号、电话、身份证号、设备编号等需严格格式的输入场景。
二、选择类控件(CheckBox、RadioButton、ComboBox)
选择类控件用于从预设选项中选择内容,适配单一选择或多项选择需求。
1. CheckBox(复选框)
支持多项独立选择,选项间无互斥关系。
核心属性
Text:显示选项文本(如 “PLC 编程”)。
Checked:是否被选中(true/false)。
CheckedChanged:选中状态变化时触发的事件(实时更新结果)。
用法示例(用户技能选择)
// 初始化3个技能复选框
checkBox1.Text = "PLC编程";
checkBox2.Text = "HMI组态";
checkBox3.Text = "设备调试";
// 按钮点击:获取选中的技能
private void btnGetSkills_Click(object sender, EventArgs e)
{
List<string> skills = new List<string>();
if (checkBox1.Checked) skills.Add(checkBox1.Text);
if (checkBox2.Checked) skills.Add(checkBox2.Text);
if (checkBox3.Checked) skills.Add(checkBox3.Text);
string result = skills.Count > 0 ? string.Join("、", skills) : "无";
MessageBox.Show("选中的技能:" + result);
}
- 应用场景:用户技能、设备功能开启状态、爱好等多项独立选择场景。
2. RadioButton(单选按钮)
支持互斥选择,同一分组内仅能选中一个选项。
核心属性
Text:显示选项文本(如 “管理员”)。
Checked:是否被选中(同一容器 / 分组内互斥)。
GroupName:设置分组名称(不同组可独立选择,默认同一容器为一组)。
用法示例(用户权限选择)
// 初始化3个权限单选按钮(同一GroupBox内,自动互斥)
radioButton1.Text = "管理员";
radioButton2.Text = "操作员";
radioButton2.Checked = true; // 默认选中
radioButton3.Text = "观察员";
// 获取选中的权限
private string GetPermission()
{
if (radioButton1.Checked) return radioButton1.Text;
if (radioButton2.Checked) return radioButton2.Text;
return radioButton3.Text;
}
- 应用场景:用户权限、设备运行模式、操作类型等互斥选项选择场景。
3. ComboBox(下拉组合框)
下拉式选择控件,节省界面空间,支持 “仅选择” 或 “选择 + 输入” 两种模式。
核心属性
Items:下拉列表选项集合(Add()添加、Clear()清空)。
SelectedIndex:选中项索引(-1 表示未选中,从 0 开始)。
SelectedItem:选中的选项对象(如 “设备部”)。
DropDownStyle:下拉样式(DropDownList:仅选择;DropDown:选择 + 输入)。
用法示例(部门选择)
// 初始化部门下拉框(仅选择,不允许手动输入)
comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
comboBox1.Items.AddRange(new string[] { "设备部", "生产部", "工程部", "运维部" });
comboBox1.SelectedIndex = 0; // 默认选中第一个选项
// 获取选中的部门
private string GetDepartment()
{
return comboBox1.SelectedItem.ToString(); // 结果示例:"工程部"
}
// 动态添加新部门
private void btnAddDept_Click(object sender, EventArgs e)
{
string newDept = "研发部";
if (!comboBox1.Items.Contains(newDept))
{
comboBox1.Items.Add(newDept);
comboBox1.SelectedItem = newDept; // 自动选中新增项
}
}
- 应用场景:部门、设备类型、区域等预设选项较多的选择场景。
三、列表类控件(ListBox、CheckedListBox、ListView)
列表类控件用于展示批量数据,支持单选、多选及批量操作。
1. ListBox(列表框)
展示批量选项,支持单选或多选,适用于简单列表操作。
核心属性
Items:列表选项集合(Add()添加、Remove()删除、Clear()清空)。
SelectedIndex:选中项索引(-1 表示未选中)。
SelectedItem:当前选中项(单选时有效)。
SelectionMode:选择模式(One:单选;MultiSimple:多选;MultiExtended:Ctrl/Shift 多选)。
用法示例(用户列表添加 / 删除)
// 初始化列表框(单选模式)
listBox1.SelectionMode = SelectionMode.One;
// 添加用户(按钮点击事件)
private void btnAddUser_Click(object sender, EventArgs e)
{
string userName = txtUserName.Text.Trim();
if (!string.IsNullOrEmpty(userName) && !listBox1.Items.Contains(userName))
{
listBox1.Items.Add(userName);
txtUserName.Clear(); // 清空输入框
}
}
// 删除选中用户(按钮点击事件)
private void btnDeleteUser_Click(object sender, EventArgs e)
{
if (listBox1.SelectedIndex != -1) // 确保有选中项
{
listBox1.Items.RemoveAt(listBox1.SelectedIndex);
}
else
{
MessageBox.Show("请先选中要删除的用户");
}
}
- 应用场景:用户列表、设备列表等需展示批量数据并支持单选操作的场景。
2. CheckedListBox(带复选框的列表框)
列表项自带复选框,支持批量选择,无需额外添加 CheckBox 控件。
核心属性
Items:存储列表选项(同 ListBox)。
CheckedItems:所有被选中的项(返回集合,需遍历获取)。
CheckOnClick:点击项直接切换选中状态(无需双击,建议设为true)。
ItemCheck:选中状态变化时触发的事件(实时处理选择)。
用法示例(多选设备列表)
// 初始化设备列表(点击直接选中)
checkedListBox1.CheckOnClick = true;
checkedListBox1.Items.AddRange(new string[] {
"S7-1200 PLC", "昆仑通态HMI", "三菱伺服电机", "ABB机器人"
});
// 获取所有选中的设备(按钮点击事件)
private void btnGetDevices_Click(object sender, EventArgs e)
{
List<string> selectedDevices = new List<string>();
foreach (var item in checkedListBox1.CheckedItems)
{
selectedDevices.Add(item.ToString());
}
MessageBox.Show("选中的设备:" + string.Join("、", selectedDevices));
}
// 全选/取消全选
private void btnSelectAll_Click(object sender, EventArgs e)
{
for (int i = 0; i < checkedListBox1.Items.Count; i++)
{
checkedListBox1.SetItemChecked(i, true); // 全选
// checkedListBox1.SetItemChecked(i, false); // 取消全选(按需切换)
}
}
- 应用场景:批量操作的设备列表、多角色权限分配等需多选的场景。
3. ListView(列表视图)
支持多列表格展示,适配复杂数据(如含多个属性的产品、订单),功能灵活。
核心属性
Items:列表项集合(存储每行数据)。
View:显示方式(Details:表格;LargeIcon:大图标;SmallIcon:小图标;List:简单列表;Tile:平铺)。
Columns:Details视图下的列集合(需手动添加列标题)。
SelectedItems:所有被选中的项(返回集合,需遍历获取)。
MultiSelect:是否允许多选(默认true)。
用法示例(产品信息列表)
// 初始化列表视图(表格模式)
listView1.View = View.Details; // 表格视图
listView1.MultiSelect = true; // 允许多选
// 添加列标题(列名+宽度)
listView1.Columns.Add("产品 ID", 80);
listView1.Columns.Add("产品名称", 150);
listView1.Columns.Add("价格", 80);
// 添加产品数据(每行对应一个ListViewItem)
listView1.Items.Add(new ListViewItem(new string[] { "P001", "笔记本电脑", "5999" }));
listView1.Items.Add(new ListViewItem(new string[] { "P002", "无线鼠标", "99" }));
listView1.Items.Add(new ListViewItem(new string[] { "P003", "机械键盘", "299" }));
// 获取选中的产品(按钮点击事件)
private void btnGetProducts_Click(object sender, EventArgs e)
{
List<string> selectedProducts = new List<string>();
foreach (ListViewItem item in listView1.SelectedItems)
{
selectedProducts.Add(item.SubItems[1].Text); // 获取“产品名称”列内容
}
MessageBox.Show("选中的产品:" + string.Join("、", selectedProducts));
}
// 清空列表
private void btnClearList_Click(object sender, EventArgs e)
{
listView1.Items.Clear(); // 清空所有行数据
// listView1.Columns.Clear(); // 按需清空列标题
}
- 应用场景:产品列表、订单记录、用户信息表等需多列展示复杂数据的场景。
四、学习任务综合演示
通过实际任务巩固控件用法,结合多类控件实现完整功能。
任务 1:制作用户信息录入窗体
需求:包含部门下拉选择(ComboBox)、技能复选(CheckBox)、备注输入(RichTextBox),并实现信息保存预览。
核心代码片段
// 1. 初始化控件
// 部门下拉框
comboBoxDept.Items.AddRange(new string[] { "设备部", "生产部" });
comboBoxDept.SelectedIndex = 0; // 默认选中第一个部门
// 技能复选框
checkBoxSkill1.Text = "PLC编程";
checkBoxSkill2.Text = "HMI组态";
// 备注富文本框
richTextBoxRemark.ScrollBars = RichTextBoxScrollBars.Vertical;
richTextBoxRemark.AppendText("请输入用户备注信息...");
// 2. 保存按钮点击事件(预览信息)
private void btnSave_Click(object sender, EventArgs e)
{
// 获取部门
string dept = comboBoxDept.SelectedItem.ToString();
// 获取技能
string skills = "";
if (checkBoxSkill1.Checked) skills += checkBoxSkill1.Text;
if (checkBoxSkill2.Checked) skills += (skills == "" ? "" : "、") + checkBoxSkill2.Text;
skills = skills == "" ? "无" : skills;
// 获取备注
string remark = richTextBoxRemark.Text.Trim();
// 弹窗预览
MessageBox.Show($"部门:{dept}\n技能:{skills}\n备注:{remark}");
}
任务 2:实现列表项添加 / 删除(ListBox)
需求:通过输入框添加用户到 ListBox,支持选中项删除,避免重复添加。
核心代码片段
// 1. 初始化列表框(单选模式)
listBoxUsers.SelectionMode = SelectionMode.One;
// 2. 添加用户(按钮点击事件)
private void btnAddUser_Click(object sender, EventArgs e)
{
string user = txtUserName.Text.Trim();
// 校验:非空且不重复
if (!string.IsNullOrEmpty(user) && !listBoxUsers.Items.Contains(user))
{
listBoxUsers.Items.Add(user);
txtUserName.Clear(); // 清空输入框
}
}
// 3. 删除选中用户(按钮点击事件)
private void btnDeleteUser_Click(object sender, EventArgs e)
{
// 校验:有选中项
if (listBoxUsers.SelectedIndex != -1)
{
listBoxUsers.Items.RemoveAt(listBoxUsers.SelectedIndex);
}
else
{
MessageBox.Show("请先选中要删除的用户");
}
}
五、总结
WinForm 常用控件(上)的核心要点的在于掌握 “控件特性 - 场景匹配 - 代码实现” 的对应关系:
文本类控件:重点控制格式(RichTextBox 的多行 / 滚动条、MaskedTextBox 的掩码)。
选择类控件:重点获取状态(CheckBox 的Checked、ComboBox 的SelectedItem、RadioButton 的互斥性)。
列表类控件:重点批量操作(ListBox 的Items.Add/Remove、CheckedListBox 的CheckedItems、ListView 的多列设置)。
实际开发中,需根据需求组合控件(如 “录入窗体 + 列表展示”),通过任务练习强化应用能力。
要不要我帮你进一步整理一份包含控件属性对比表和常见错误排查指南的扩展版笔记?