WinForms中,CheckBox 控件是一個允許用戶選擇或取消選擇的單選按鈕。它通常用于表示布爾值(真/假)或允許多選的情況。以下是如何使用 CheckBox 控件的一些基本信息和示例代碼。
以下是一個簡單的示例,演示如何創建一個 CheckBox 控件,并處理其 CheckedChanged 事件:
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
// 創建 CheckBox 實例
CheckBox checkBox1 = new CheckBox();
// 設置 CheckBox 的一些屬性
checkBox1.Location = new Point(10, 10);
checkBox1.Size = new Size(100, 20);
checkBox1.Text = "我同意條款和條件";
// 將 CheckBox 添加到窗體的控件集合中
this.Controls.Add(checkBox1);
// 為 CheckBox 添加 CheckedChanged 事件處理程序
checkBox1.CheckedChanged += new EventHandler(checkBox1_CheckedChanged);
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
// 獲取 CheckBox 的引用
CheckBox checkBox = sender as CheckBox;
// 在這里執行當選中狀態改變時的操作,例如啟用或禁用其他控件
if (checkBox.Checked)
{
labelStatus.Text = "已選中";
}
else
{
labelStatus.Text = "未選中";
}
}
}
在這個示例中,我們創建了一個 CheckBox 實例,并設置了其位置、大小和顯示的文字。然后,我們將 CheckBox 添加到窗體的控件集合中,并為其添加了 CheckedChanged 事件處理程序。在事件處理程序中,我們根據 CheckBox 的選中狀態更新了一個 Label 控件的文本,以反映當前的選中狀態。
通過這些基本步驟,您可以在 WinForms 應用程序中使用 CheckBox 控件來收集用戶的布爾輸入,或者在用戶界面中提供可切換的選項。
要
使用 CheckBox 為用戶提供一個選項,例如 true/false 或 yes/no。 控件 CheckBox 可以顯示圖像或文本或兩者。
CheckBox 控件 RadioButton 具有類似的功能:允許用戶從選項列表中選擇。 CheckBox 控件允許用戶選取選項的組合。 相比之下, RadioButton 控件允許用戶從互斥選項中進行選擇。
正文
常用屬性
Checked | 獲取或設置一個值,該值指示 CheckBox 是否處于選中狀態。 |
CheckState | 獲取或設置 CheckBox 的狀態。 |
ThreeState | 獲取或設置一個值,該值指示此 CheckBox 是否允許三種復選狀態而不是兩種。 |
Tag | 獲取或設置包含有關控件的數據的對象。 |
Text | 獲取或設置與此控件關聯的文本。 |
常用事件
CheckedChanged | 當 Checked 屬性的值更改時發生。 |
CheckStateChanged | 當 CheckState 屬性的值更改時發生。 |
我們做一個checkbox的權限設置界面
設置權限按鈕設置名稱:btnSet
代碼
private void btnSet_Click(object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder();
if (checkBox1.Checked)
{
sb.Append("基本信息管理;");
}
if (checkBox2.Checked)
{
sb.Append("庫存管理;");
}
if (checkBox3.Checked)
{
sb.Append("權限管理;");
}
if (checkBox4.Checked)
{
sb.Append("設備管理;");
}
if (checkBox5.Checked)
{
sb.Append("質量管理;");
}
MessageBox.Show(sb.ToString());
}
我們改進一下,通過編譯窗體中的checkbox完成判斷
StringBuilder sb = new StringBuilder();
foreach (var item in this.Controls)
{
if (item.GetType()==typeof(CheckBox))
{
if (((CheckBox)(item)).Checked)
{
sb.Append(((CheckBox)(item)).Text+";");
}
}
}
MessageBox.Show(sb.ToString());
我們添加全選或全取消功能
private void btnSelectAll_Click(object sender, EventArgs e)
{
foreach (var item in this.Controls)
{
if (item.GetType() == typeof(CheckBox))
{
((CheckBox)(item)).Checked = true;
}
}
}
private void btnUnSelectAll_Click(object sender, EventArgs e)
{
foreach (var item in this.Controls)
{
if (item.GetType() == typeof(CheckBox))
{
((CheckBox)(item)).Checked = false;
}
}
}
Checkbox有一個三態的狀態
CheckState
Checked | 1 | 該控件處于選中狀態。 |
Indeterminate | 2 | 該控件處于不確定狀態。 一個不確定的控件通常具有灰色的外觀。 |
Unchecked | 0 | 該控件處于未選中狀態。 |
Indeterminate 不確定狀態
時候在Win Form開發過程中,窗口顯示的控件如單選、復選框等,需要根據數據庫讀取數據的結果動態生成指定數量的控件。因此涉及到動態生成指定數量的控件,并定義生成控件的事件等。本文主要以CheckBox為例對動態控件添加進行說明,為C#初學者提供參考與借鑒。首選給出本案例需求窗口:
案例Form
本例所用Form窗口如上圖所示,問題:要求在生成chart圖表時,根據統計結果即柱狀圖的數量,動態生成右側CheckBox,并實現初始狀態全部CheckBox為選中狀態,改變選中數量時左側圖標自動顯示對應柱狀圖。
解決問題思路:
(1)獲取查詢記錄集的數量(要生成多少個CheckBox實例對象)
int cnt=ds.Tables[0].Rows.Count;//ds存儲查詢結果,查詢過程略,cnt即為記錄集條數
(2)對通過new 實例化的CheckBox如何存儲?(本例需要生成三個checkbox)
C#中本身不提供長度未知的動態數組,因此不能直接使用數組對實例化后對象進行存儲,本例設計使用ArrayList實現長度未知動態數組功能。
al = new ArrayList();//al是本例定義的變量,在load中進行初始化,初始化成功之后可存儲checkbox;
(3) 循環創建CheckBox實例
for(int m=0;m<cnt;m++) { ... CheckBox temp= new CheckBox();//temp為實例化CheckBox temp.AutoSize = true; temp.Location = new System.Drawing.Point(24, y);//繪圖位置計算x坐標,Y坐標 temp.Name = "checkBox"+(m+1).ToString(); temp.Size = new System.Drawing.Size(59, 20);//checkbox繪制大小 temp.Text = ds.Tables[0].Rows[m].ItemArray[0].ToString(); ... temp.Checked = true;//初始化為選中狀態 temp.Click += new System.EventHandler(Check_Click);//綁定事件處理函數 this.panel1.Controls.Add(temp); }
在創建checkbox實例的同時,由于控件是動態創建的,因此需要手動定義消息處理,實現checkbox的點擊事件。所有的checkbox都響應check_Click事件:
temp.Click += new System.EventHandler(Check_Click);//綁定事件處理函數
(4) check_Click事件編寫
該事件主要遍歷所有動態生成的checkbox獲取其狀態構造查詢語句,實現對記錄集ds數據進行篩選。由于所有checkbox都響應該事件,因此需要object sender參數接收被點擊的控件,通過arraylist al表示全部的checkbox,并以此為基礎進行操作。
private void Check_Click(object sender, EventArgs e) { CheckBox ck = (CheckBox)sender;//接收當前點擊checkbox for(int m = 0; m < al.Count; m++) { CheckBox cbk = (CheckBox)al[m]; if (cbk.Checked) { //循環遍歷checkbox,獲取每一個checkbox狀態,構造查詢語句條件 } } }
以上完成了動態checkbox的創建及消息響應設置,可以進一步實現根據checkbox選擇顯示Chart不同內容了。主要實現代碼如下:
chart1.Update();// 使區域無效 chart1.DataSource = ds.Tables[0].Select(str);//對ds記錄集進行篩選。str參數在checkbox響應函數中定義;
至此本案例全部功能可以得到實現,最終實現效果如本文開頭部分給出的運行效果截圖。近期本頭條號重點對C# Win Form編程基礎知識進行說明。往期文章請點擊鏈接閱讀:
本頭條號長期關注于青少年編程資訊分享;編程課程、素材、代碼分享及青少年編程培訓。如果您對以上方面有興趣,可關注該頭條號,如有編程學習問題可以聯系作者,共同探討。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。