有时候在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 = true; = new Sy(24, y);//绘图位置计算x坐标,Y坐标 = "checkBox"+(m+1).ToString(); = new Sy(59, 20);//checkbox绘制大小 = ds.Tables[0].Rows[m].ItemArray[0].ToString(); ... = true;//初始化为选中状态 += new Sy(Check_Click);//绑定事件处理函数 (temp); }在创建checkbox实例的同时,由于控件是动态创建的,因此需要手动定义消息处理,实现checkbox的点击事件。所有的checkbox都响应check_Click事件:
+= new Sy(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 ) { //循环遍历checkbox,获取每一个checkbox状态,构造查询语句条件 } } }以上完成了动态checkbox的创建及消息响应设置,可以进一步实现根据checkbox选择显示Chart不同内容了。主要实现代码如下:
c();// 使区域无效 c = ds.Tables[0].Select(str);//对ds记录集进行筛选。str参数在checkbox响应函数中定义;至此本案例全部功能可以得到实现,最终实现效果如本文开头部分给出的运行效果截图。近期本头条号重点对C# Win Form编程基础知识进行说明。往期文章请点击链接阅读:
- Win Form登录框本地记住密码功能实现
- C# Win Form 编程实现图片的数据库存储
- C# Win Form 实现XML文件读写
- C# Win Form 读取CSV文件数据
本头条号长期关注于青少年编程资讯分享;编程课程、素材、代码分享及青少年编程培训。如果您对以上方面有兴趣,可关注该头条号,如有编程学习问题可以联系作者,共同探讨。