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 = ; 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 = ; i < arr.Count(); i++)
{
checkedListBox1.Items.Add(arr[i]);
} string sb = "您的兴趣爱好是";
//取出选中的值
for (int i = ; 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[];
checkedListBox1.ValueMember = "student_id";
checkedListBox1.DisplayMember = "student_name";

获取checkedListBox1选中项的DisplayMember和ValueMember

for (int i = ; 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 = ; i < checkedListBox1.Items.Count; i++)
{
checkedListBox1.SetItemChecked(i, true);
}
}
else
{
for (int i = ; i < checkedListBox1.Items.Count; i++)
{
checkedListBox1.SetItemChecked(i, false);
}
}
}

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

Winform开发常用控件之Checkbox和CheckedListBox的更多相关文章

  1. Winform开发常用控件之TreeView菜单导航和权限用法

    TreeView一个很棒的控件,我们在做WEB开发时常常犯困的一个东东.当然这里介绍winform里面的用法唠. 先介绍几个属性吧,CheckBoxes设置为true的话树形节点前面会出现checkb ...

  2. Winform开发常用控件之DataGridView的简单数据绑定——自动绑定

    DataGridView控件可谓是Winform开发的重点控件,对于数据的呈现和操作非常方便,DataGridView可谓是既简单又复杂.简单在于其已经集成了很多方法,复杂在于可以使用其实现复杂的数据 ...

  3. Winform开发常用控件之ComboBox、ListBox

    ComboBox就是我们常见的下拉框,对于此类控件,我们最关心的当然是数据的绑定和选择值得获取. 首先介绍个属性DropDownStyle,如果不允许ComboBox输入值,只能选择,就选DropDo ...

  4. Winform开发常用控件之DataGridView的简单数据绑定——代码绑定DataSet、DataTable、IList、SqlDataReader

    前文介绍了Winform为DataGridView提供的数据自动绑定功能,下面介绍一下采用代码的数据绑定 1.用DataSet和DataTable为DataGridView提供数据源 先上代码 pri ...

  5. DevExpress winform XtraEditor常用控件

    最近在公司里面开始使用DevExpress winform的第三方控件进行开发和维护,这里整理一些常用控件的资料以便于后续查看 ComboBoxEdit 这个控件和winform自带的控件差不多,使用 ...

  6. WinForm 遍历用户控件里CheckBox

    1.常用调用方法 public partial class UCRights : UserControl { private readonly int LOCATIONY; private DataT ...

  7. WinForm开发-界面控件到实体,实体到界面控件自动绑定

    在WinForm开发中,我们是不是为绑定界面控件的数据而每个控件每个控件的赋值?在保存修改时是不是也是每个控件每个控件的赋值到实体中?字段一多,那简直就是噩梦.有没有像Web中那样方便的方法直接就自动 ...

  8. C# Winform开发以及控件开发的需要注意的,被人问怕了,都是基础常识

    我是搞控件开发的,经常被人问,所以把一些问题记录了下来!如果有人再问,直接把地址丢给他看. 一. 经常会有人抱怨Winform界面闪烁,下面有几个方法可以尽可能的避免出现闪烁 1.控件的使用尽量以纯色 ...

  9. c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)

    一.单元格内容的操作 *****// 取得当前单元格内容 Console.WriteLine(DataGridView1.CurrentCell.Value); // 取得当前单元格的列 Index ...

随机推荐

  1. windows远程桌面端口修改

    远程桌面服务所使用的通信协议是Microsoft定义RDP(Reliable Data Protocol)协议,RDP协议的TCP通信端口号是3389.为了安全起见,我们常需要更改其端口. 运行注册表 ...

  2. springmvc 中RequestMapping注解的使用

    1.RequestMapping注解既可以修饰方法,又可以修饰类型,类型指定的url相对于web跟路径,而方法修饰的url相对于类url: 2.RequestMapping的几个属性: value:用 ...

  3. springmvc的3中路径风格

    1.导入相应的jar包,文件放置情况 2.web.xml <?xml version="1.0" encoding="UTF-8"?> <we ...

  4. log4net 日志写入MongoDB 实现分布式日志

    本人在.net framework 4.5下测试成功,首先需要安装log4mongo-net组件,见https://www.nuget.org/packages/log4mongo-net/ vs20 ...

  5. 浅谈 Linux 内核开发之网络设备驱动

    转自http://www.ibm.com/developerworks/cn/linux/l-cn-networkdriver/ 网络设备介绍 网络设备是计算机体系结构中必不可少的一部分,处理器如果想 ...

  6. [SQL]分布师查询

    EXEC sp_addlinkedserver @server='serverA', @srvproduct='', @provider='SQLOLEDB', @datasrc='192.168.0 ...

  7. [SQL]声明触发器 <待整理>

    ./*声明触发器 create trigger dl_stu_mess4 on student for delete as declare @name_id int select @name_id=s ...

  8. ContextLoaderListener与DispatcherServlet所加载的applicationContext的区别

    spring通过在web.xml 中配置ContextLoaderListener 来加载context配置文件,在DispatcherServlet中也可以来加载spring context配置文件 ...

  9. Codeforces 452D [模拟][贪心]

    题意: 给你k件衣服处理,告诉你洗衣机烘干机折叠机的数量,和它们处理一件衣服的时间,要求一件衣服在洗完之后必须立刻烘干,烘干之后必须立刻折叠,问所需的最小时间. 思路: 1.按照时间模拟 2.若洗完的 ...

  10. java类的高级特性

    1.非内部类不能被声明为private 或protected访问类型.