WinForms中,CheckBox 控件是一个允许用户选择或取消选择的单选按钮。它通常用于表示布尔值(真/假)或允许多选的情况。以下是如何使用 CheckBox 控件的一些基本信息和示例代码。
以下是一个简单的示例,演示如何创建一个 CheckBox 控件,并处理其 CheckedChanged 事件:
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
// 创建 CheckBox 实例
CheckBox checkBox1 = new CheckBox();
// 设置 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;
// 在这里执行当选中状态改变时的操作,例如启用或禁用其他控件
if (checkBox.Checked)
{
labelStatus.Text = "已选中";
}
else
{
labelStatus.Text = "未选中";
}
}
}
在这个示例中,我们创建了一个 CheckBox 实例,并设置了其位置、大小和显示的文字。然后,我们将 CheckBox 添加到窗体的控件集合中,并为其添加了 CheckedChanged 事件处理程序。在事件处理程序中,我们根据 CheckBox 的选中状态更新了一个 Label 控件的文本,以反映当前的选中状态。
通过这些基本步骤,您可以在 WinForms 应用程序中使用 CheckBox 控件来收集用户的布尔输入,或者在用户界面中提供可切换的选项。
要
使用 CheckBox 为用户提供一个选项,例如 true/false 或 yes/no。 控件 CheckBox 可以显示图像或文本或两者。
CheckBox 控件 RadioButton 具有类似的功能:允许用户从选项列表中选择。 CheckBox 控件允许用户选取选项的组合。 相比之下, RadioButton 控件允许用户从互斥选项中进行选择。
正文
常用属性
Checked | 获取或设置一个值,该值指示 CheckBox 是否处于选中状态。 |
CheckState | 获取或设置 CheckBox 的状态。 |
ThreeState | 获取或设置一个值,该值指示此 CheckBox 是否允许三种复选状态而不是两种。 |
Tag | 获取或设置包含有关控件的数据的对象。 |
Text | 获取或设置与此控件关联的文本。 |
常用事件
CheckedChanged | 当 Checked 属性的值更改时发生。 |
CheckStateChanged | 当 CheckState 属性的值更改时发生。 |
我们做一个checkbox的权限设置界面
设置权限按钮设置名称: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("权限管理;");
}
if (checkBox4.Checked)
{
sb.Append("设备管理;");
}
if (checkBox5.Checked)
{
sb.Append("质量管理;");
}
MessageBox.Show(sb.ToString());
}
我们改进一下,通过编译窗体中的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有一个三态的状态
CheckState
Checked | 1 | 该控件处于选中状态。 |
Indeterminate | 2 | 该控件处于不确定状态。 一个不确定的控件通常具有灰色的外观。 |
Unchecked | 0 | 该控件处于未选中状态。 |
Indeterminate 不确定状态
时候在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 temp.AutoSize = true; temp.Location = new System.Drawing.Point(24, y);//绘图位置计算x坐标,Y坐标 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;//初始化为选中状态 temp.Click += new System.EventHandler(Check_Click);//绑定事件处理函数 this.panel1.Controls.Add(temp); }
在创建checkbox实例的同时,由于控件是动态创建的,因此需要手动定义消息处理,实现checkbox的点击事件。所有的checkbox都响应check_Click事件:
temp.Click += new System.EventHandler(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 (cbk.Checked) { //循环遍历checkbox,获取每一个checkbox状态,构造查询语句条件 } } }
以上完成了动态checkbox的创建及消息响应设置,可以进一步实现根据checkbox选择显示Chart不同内容了。主要实现代码如下:
chart1.Update();// 使区域无效 chart1.DataSource = ds.Tables[0].Select(str);//对ds记录集进行筛选。str参数在checkbox响应函数中定义;
至此本案例全部功能可以得到实现,最终实现效果如本文开头部分给出的运行效果截图。近期本头条号重点对C# Win Form编程基础知识进行说明。往期文章请点击链接阅读:
本头条号长期关注于青少年编程资讯分享;编程课程、素材、代码分享及青少年编程培训。如果您对以上方面有兴趣,可关注该头条号,如有编程学习问题可以联系作者,共同探讨。
*请认真填写需求信息,我们会在24小时内与您取得联系。