假如panel里面有30个checkbox,最多只能选3个,选多了的话,checked为false。用C#怎么写代码呢?

来源:百度知道 编辑:UC知道 时间:2024/06/18 08:36:12
这是我的代码,是不是哪里有问题呢?
void checkbox(Object sender, EventArgs e)
{
int n=0;
for (int i = 0; i < Panel1.Controls.Count; i++)
{
if(Panel1.Controls[i] is CheckBox)
{
//CheckBox cb = (CheckBox)Panel1.FindControl("CheckBox.ID");
CheckBox chb = (CheckBox)Panel1.Controls[i];
for (int chb_i = 0; chb_i < chb.Controls.Count; chb_i++)
{
if (chb.Checked) ++n;
}
if (n > 4)
{
chb.Checked = false;
Label1.Text = "您已经选择了四项";

}
}
}
}
我查了下资料还有人说用到
foreach (Control var in Controls)
{
if (var is CheckBox)
{
.....

int n=0;
改成
int n=0;
int sum=0;

CheckBox chb = (CheckBox)Panel1.Controls[i];
for (int chb_i = 0; chb_i < chb.Controls.Count; chb_i++)
{
if (chb.Checked) ++n;
}
if (n > 4)
{
chb.Checked = false;
Label1.Text = "您已经选择了四项";

}
改成
CheckBox chb = (CheckBox)Panel1.Controls[i];
if (chb.Checked)
{
sum+=1;
}
if(sum>3)
{
chb.Checked = false;
Label1.Text = "您已经选择了四项";
return ;
}

我说说foreach的用法吧。
foreach语句用来迭代集合中的每个项目,其语法格式如下:
foreach(type identifier in expression)
也就是foreach(类型 标识符 in 表达式)
假设在一个窗体上有多个textbox,我要清除这个textbox的text值,可以这么实现:
foreach(Control cont in this.Controls){
if(cont.GetType().ToString()=="System.Windows.Forms.TextBox"){
cont.Text="";
}
}
其中 Control表示控件(类型) cont表示变量名(标识符) this.Controls表示窗体上的所有控件,this指代当前窗体。

int Che