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