zoukankan      html  css  js  c++  java
  • 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);
                    }
                }
            }

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

  • 相关阅读:
    程序猿也爱学英语(上),有图有真相
    New Year's resolution for 2016
    Got the Best Employee of the year 2015 Star Award
    AngularJs项目文件以及文件夹结构
    完成AngularJS with MVC 5, Web API 2项目
    两则新闻引发的思考
    关于招聘的最新信息
    架构师面试更新版
    2015新加坡总统府
    关于2014年的旅行
  • 原文地址:https://www.cnblogs.com/yieryi/p/4603708.html
Copyright © 2011-2022 走看看