WinForm 常用控件(上)學習筆記

本文整理 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)” 的對應關系:

  1. 文本類控件:重點控制格式(RichTextBox 的多行 / 滾動條、MaskedTextBox 的掩碼)。

  2. 選擇類控件:重點獲取狀態(tài)(CheckBox 的Checked、ComboBox 的SelectedItem、RadioButton 的互斥性)。

  3. 列表類控件:重點批量操作(ListBox 的Items.Add/Remove、CheckedListBox 的CheckedItems、ListView 的多列設置)。

  4. 實際開發(fā)中,需根據(jù)需求組合控件(如 “錄入窗體 + 列表展示”),通過任務練習強化應用能力。

要不要我?guī)湍氵M一步整理一份包含控件屬性對比表常見錯誤排查指南的擴展版筆記?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容