本文整理 WinForm 開發(fā)中常用的文本類、選擇類、列表類控件知識點,包含核心屬性、用法示例及實際應用場景,適用于基礎階段學習。
一、文本類控件(RichTextBox、MaskedTextBox)
文本類控件主要用于文本輸入與展示,適配不同格式和規(guī)則的文本處理需求。
1. RichTextBox(富文本框)
支持多行文本和格式化內(nèi)容,適用于長文本輸入場景。
核心屬性
Text:獲取 / 設置控件中的純文本內(nèi)容。
Rtf:獲取 / 設置 RTF 格式文本(支持字體、顏色等格式化)。
Multiline:是否支持多行文本(默認true)。
ScrollBars:滾動條類型(None/Horizontal/Vertical/Both,長文本建議用Vertical)。
MaxLength:限制輸入最大字符數(shù)(默認無限制,工業(yè)場景常用 500-1000)。
常用方法
AppendText(string text):在現(xiàn)有文本后追加內(nèi)容(如日志輸出)。
Clear():清空所有文本。
用法示例(個人簡介錄入)
// 初始化富文本框
richTextBox1.ScrollBars = RichTextBoxScrollBars.Vertical; // 垂直滾動條
richTextBox1.MaxLength = 1000; // 限制最大輸入1000字
richTextBox1.AppendText("請輸入詳細信息,支持換行...\n"); // 初始提示
// 讀取輸入內(nèi)容
string intro = richTextBox1.Text.Trim();
- 應用場景:用戶備注、設備操作日志、長文本說明等需多行 / 格式化文本的場景。
2. MaskedTextBox(掩碼文本框)
強制用戶按預設格式輸入,避免無效格式,適用于固定格式文本錄入。
核心作用:通過 “掩碼” 約束輸入格式(如電話、身份證、工號)。
核心屬性
Mask:設置掩碼格式(如"000-0000-0000"對應固定格式電話)。
Text:獲取用戶輸入文本(包含掩碼分隔符)。
MaskCompleted:判斷是否完整輸入掩碼(true表示格式完整)。
常用掩碼字符
0:必須輸入數(shù)字(0-9)。
9:可選輸入數(shù)字或空格。
#:可選輸入數(shù)字、加號或減號。
L:必須輸入字母(a-z, A-Z)。
\:轉(zhuǎn)義字符(如-表示顯示 “-” 符號)。
用法示例(工號輸入)
// 工號格式:OP-2023-0001(前綴+年份+4位序號)
maskedTextBox1.Mask = "OP-0000-0000";
maskedTextBox1.PromptChar = '_'; // 未輸入時顯示下劃線提示
// 驗證并讀取工號
if (maskedTextBox1.MaskCompleted)
{
string workNo = maskedTextBox1.Text; // 結(jié)果示例:"OP-2023-0001"
}
else
{
MessageBox.Show("請按格式輸入工號(OP-年份-序號)");
}
- 應用場景:工號、電話、身份證號、設備編號等需嚴格格式的輸入場景。
二、選擇類控件(CheckBox、RadioButton、ComboBox)
選擇類控件用于從預設選項中選擇內(nèi)容,適配單一選擇或多項選擇需求。
1. CheckBox(復選框)
支持多項獨立選擇,選項間無互斥關系。
核心屬性
Text:顯示選項文本(如 “PLC 編程”)。
Checked:是否被選中(true/false)。
CheckedChanged:選中狀態(tài)變化時觸發(fā)的事件(實時更新結(jié)果)。
用法示例(用戶技能選擇)
// 初始化3個技能復選框
checkBox1.Text = "PLC編程";
checkBox2.Text = "HMI組態(tài)";
checkBox3.Text = "設備調(diào)試";
// 按鈕點擊:獲取選中的技能
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);
}
- 應用場景:用戶技能、設備功能開啟狀態(tài)、愛好等多項獨立選擇場景。
2. RadioButton(單選按鈕)
支持互斥選擇,同一分組內(nèi)僅能選中一個選項。
核心屬性
Text:顯示選項文本(如 “管理員”)。
Checked:是否被選中(同一容器 / 分組內(nèi)互斥)。
GroupName:設置分組名稱(不同組可獨立選擇,默認同一容器為一組)。
用法示例(用戶權(quán)限選擇)
// 初始化3個權(quán)限單選按鈕(同一GroupBox內(nèi),自動互斥)
radioButton1.Text = "管理員";
radioButton2.Text = "操作員";
radioButton2.Checked = true; // 默認選中
radioButton3.Text = "觀察員";
// 獲取選中的權(quán)限
private string GetPermission()
{
if (radioButton1.Checked) return radioButton1.Text;
if (radioButton2.Checked) return radioButton2.Text;
return radioButton3.Text;
}
- 應用場景:用戶權(quán)限、設備運行模式、操作類型等互斥選項選擇場景。
3. ComboBox(下拉組合框)
下拉式選擇控件,節(jié)省界面空間,支持 “僅選擇” 或 “選擇 + 輸入” 兩種模式。
核心屬性
Items:下拉列表選項集合(Add()添加、Clear()清空)。
SelectedIndex:選中項索引(-1 表示未選中,從 0 開始)。
SelectedItem:選中的選項對象(如 “設備部”)。
DropDownStyle:下拉樣式(DropDownList:僅選擇;DropDown:選擇 + 輸入)。
用法示例(部門選擇)
// 初始化部門下拉框(僅選擇,不允許手動輸入)
comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
comboBox1.Items.AddRange(new string[] { "設備部", "生產(chǎn)部", "工程部", "運維部" });
comboBox1.SelectedIndex = 0; // 默認選中第一個選項
// 獲取選中的部門
private string GetDepartment()
{
return comboBox1.SelectedItem.ToString(); // 結(jié)果示例:"工程部"
}
// 動態(tài)添加新部門
private void btnAddDept_Click(object sender, EventArgs e)
{
string newDept = "研發(fā)部";
if (!comboBox1.Items.Contains(newDept))
{
comboBox1.Items.Add(newDept);
comboBox1.SelectedItem = newDept; // 自動選中新增項
}
}
- 應用場景:部門、設備類型、區(qū)域等預設選項較多的選擇場景。
三、列表類控件(ListBox、CheckedListBox、ListView)
列表類控件用于展示批量數(shù)據(jù),支持單選、多選及批量操作。
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("請先選中要刪除的用戶");
}
}
- 應用場景:用戶列表、設備列表等需展示批量數(shù)據(jù)并支持單選操作的場景。
2. CheckedListBox(帶復選框的列表框)
列表項自帶復選框,支持批量選擇,無需額外添加 CheckBox 控件。
核心屬性
Items:存儲列表選項(同 ListBox)。
CheckedItems:所有被選中的項(返回集合,需遍歷獲取)。
CheckOnClick:點擊項直接切換選中狀態(tài)(無需雙擊,建議設為true)。
ItemCheck:選中狀態(tài)變化時觸發(fā)的事件(實時處理選擇)。
用法示例(多選設備列表)
// 初始化設備列表(點擊直接選中)
checkedListBox1.CheckOnClick = true;
checkedListBox1.Items.AddRange(new string[] {
"S7-1200 PLC", "昆侖通態(tài)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); // 取消全選(按需切換)
}
}
- 應用場景:批量操作的設備列表、多角色權(quán)限分配等需多選的場景。
3. ListView(列表視圖)
支持多列表格展示,適配復雜數(shù)據(jù)(如含多個屬性的產(chǎn)品、訂單),功能靈活。
核心屬性
Items:列表項集合(存儲每行數(shù)據(jù))。
View:顯示方式(Details:表格;LargeIcon:大圖標;SmallIcon:小圖標;List:簡單列表;Tile:平鋪)。
Columns:Details視圖下的列集合(需手動添加列標題)。
SelectedItems:所有被選中的項(返回集合,需遍歷獲?。?。
MultiSelect:是否允許多選(默認true)。
用法示例(產(chǎn)品信息列表)
// 初始化列表視圖(表格模式)
listView1.View = View.Details; // 表格視圖
listView1.MultiSelect = true; // 允許多選
// 添加列標題(列名+寬度)
listView1.Columns.Add("產(chǎn)品 ID", 80);
listView1.Columns.Add("產(chǎn)品名稱", 150);
listView1.Columns.Add("價格", 80);
// 添加產(chǎn)品數(shù)據(jù)(每行對應一個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" }));
// 獲取選中的產(chǎn)品(按鈕點擊事件)
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); // 獲取“產(chǎn)品名稱”列內(nèi)容
}
MessageBox.Show("選中的產(chǎn)品:" + string.Join("、", selectedProducts));
}
// 清空列表
private void btnClearList_Click(object sender, EventArgs e)
{
listView1.Items.Clear(); // 清空所有行數(shù)據(jù)
// listView1.Columns.Clear(); // 按需清空列標題
}
- 應用場景:產(chǎn)品列表、訂單記錄、用戶信息表等需多列展示復雜數(shù)據(jù)的場景。
四、學習任務綜合演示
通過實際任務鞏固控件用法,結(jié)合多類控件實現(xiàn)完整功能。
任務 1:制作用戶信息錄入窗體
需求:包含部門下拉選擇(ComboBox)、技能復選(CheckBox)、備注輸入(RichTextBox),并實現(xiàn)信息保存預覽。
核心代碼片段
// 1. 初始化控件
// 部門下拉框
comboBoxDept.Items.AddRange(new string[] { "設備部", "生產(chǎn)部" });
comboBoxDept.SelectedIndex = 0; // 默認選中第一個部門
// 技能復選框
checkBoxSkill1.Text = "PLC編程";
checkBoxSkill2.Text = "HMI組態(tài)";
// 備注富文本框
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:實現(xiàn)列表項添加 / 刪除(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("請先選中要刪除的用戶");
}
}
五、總結(jié)
WinForm 常用控件(上)的核心要點的在于掌握 “控件特性 - 場景匹配 - 代碼實現(xiàn)” 的對應關系:
文本類控件:重點控制格式(RichTextBox 的多行 / 滾動條、MaskedTextBox 的掩碼)。
選擇類控件:重點獲取狀態(tài)(CheckBox 的Checked、ComboBox 的SelectedItem、RadioButton 的互斥性)。
列表類控件:重點批量操作(ListBox 的Items.Add/Remove、CheckedListBox 的CheckedItems、ListView 的多列設置)。
實際開發(fā)中,需根據(jù)需求組合控件(如 “錄入窗體 + 列表展示”),通過任務練習強化應用能力。
要不要我?guī)湍氵M一步整理一份包含控件屬性對比表和常見錯誤排查指南的擴展版筆記?