Winform開發常用控件之Checkbox和CheckedListBox


Winform的開發基本都是基於控件事件的,也就是事件驅動型的。

多選框的放置和值的獲取有很多種,這里介紹幾個簡單常用的方法

1、直接放置Checkbox,並獲取Checkbox的值

上圖

做法也非常簡單,就是在form中放置多個checkbox,然后循環遍歷,檢查其checked沒有,然后將checkbox.text拼接到一起,賦值給label,當然實際開發中,我們會將選取的值放入數據庫中。上代碼

 private void button1_Click(object sender, EventArgs e)
        {
            string sb = "您的興趣愛好是";
            foreach (Control cl in this.Controls)//循環整個form上的控件
            {
                if (cl is CheckBox)//看看是不是checkbox
                {
                    CheckBox ck = cl as CheckBox;//將找到的control轉化成checkbox
                    if (ck.Checked)//判斷是否選中
                    {
                        sb += ck.Text+",";
                    }
                }
            }
            label2.Text = "" + sb.ToString();

        }

2、將checkbox放入一個容器內,在容器內做循環判斷,這個比較常用,上圖先

跟上面的區別是所有的checkbox都放在groupBox1中了,當然只需要在groupBox1中查找、判斷就可以了,上代碼

 private void button1_Click(object sender, EventArgs e)
        {
            string sb = "您的興趣愛好是";
            foreach (Control cl in groupBox1.Controls)//,與上面的區別在這里哦——循環groupBox1上的控件
            {
                if (cl is CheckBox)//看看是不是checkbox
                {
                    CheckBox ck = cl as CheckBox;//將找到的control轉化成checkbox
                    if (ck.Checked)//判斷是否選中
                    {
                        sb += ck.Text+",";
                    }
                }
            }
            label2.Text = "" + sb.ToString();

        }

3、最常規的做法當然是使用CheckedListbox了

CheckedListBox里面的項目設置可采用靜態和動態加載兩種方法,一般選項固定是會采用靜態設置,選項不固定時,采用從文件或數據庫讀取,然后加載的方法

(1)先看看靜態設置吧

上圖嘮

對就是這樣的,編輯項或者在屬性items集合里面設置即可,每行一個即可,然后遍歷取值。

先上兩張圖,給大家區分一個屬性CheckOnClick,左邊的圖是CheckOnClick為false的情況(勾選的時候先反藍,單不勾中,在點一次才能勾中),右邊的圖是勾選一下就可以ok的,但是CheckOnClick得設置成true。

當然后台判斷是否選中的方法也不一樣,判斷反藍用.GetSelected(i),勾選用.GetItemChecked(i)

   

對於國人來說,還是一下選中好,所以最好將CheckOnClick設置為true,后台直接用.GetItemChecked(i)判斷取值即可,上代碼

 private void button1_Click(object sender, EventArgs e)
        {
            string sb = "您的興趣愛好是";
            for (int i = 0; i < checkedListBox1.Items.Count; i++)
            {
                if (checkedListBox1.GetItemChecked(i))//先判斷是否被選中
                {
                    sb += checkedListBox1.CheckedItems[i].ToString();//將選中的值取出
                }
            }
            label2.Text = sb;

        }

(2)動態加載CheckedListBox項

CheckedListBox動態加載就是從數控或者文件里面查找到數據,通過代碼方式綁定,先上一個簡單的例子

例子一,通過數組綁定

 //將數組項一一添加到checkedListBox上
            String[] arr = new String[] { "足球","籃球","排球"};
            for (int i = 0; i < arr.Count(); i++)
            {
                checkedListBox1.Items.Add(arr[i]);
            }

string sb = "您的興趣愛好是";
            //取出選中的值
            for (int i = 0; i < checkedListBox1.Items.Count; i++)
            {
                if (checkedListBox1.GetItemChecked(i))//先判斷是否被選中
                {
                    sb += checkedListBox1.GetItemText(checkedListBox1.Items[i]);
                }
            }
            label2.Text = sb;

例子二,借鑒園友們的一些做法

CheckedListBox應該是由ListBox擴展而來的,但在使用的時候,可能會發現——它不支持DataSource屬性,不能像ListBox那樣指定其數據源為一個DataTable。

事實上,CheckedListBox像ListBox一樣有DataSource屬性,DisplayMember和ValueMemeber屬性也都是有的,只是IntelliSense不能將其智能感知出來。園中有朋友說VS2012是支持感知的,不妨可以試一下。

因此,我們可以通過代碼將CheckedListBox綁定。

DataSet ds=bll.GetAllStudent();
checkedListBox1.DataSource = ds.Table[0];
checkedListBox1.ValueMember = "student_id";
checkedListBox1.DisplayMember = "student_name";

獲取checkedListBox1選中項的DisplayMember和ValueMember

for (int i = 0; i < checkedListBox1.CheckedItems.Count; i++)
{
    DataRowView dv = ((DataRowView)checkedListBox1.CheckedItems[i]);
    string id = dv["student_id"].ToString();
    string name = dv["student_name"].ToString();
}

4、全選和反選

 先上兩張圖

 

代碼貼上

//全選框的狀態變化事件
        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox1.Checked)
            {
                for (int i = 0; i < checkedListBox1.Items.Count; i++)
                {
                    checkedListBox1.SetItemChecked(i, true);
                }
            }
            else
            {
                for (int i = 0; i < checkedListBox1.Items.Count; i++)
                {
                    checkedListBox1.SetItemChecked(i, false);
                }
            }
        }

取值還是跟前面的方法一致。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM