我正在尝试根据用户输入的数据动态创建面板上的复选框。如果检查了其中任何一个,我想在面板外面取消选中另一个复选框。看起来像这样:
[] ALL
[] Specific1 [] Specific2 [] Specific3
这是我创建复选框的方式:
foreach (Camera cam in UserData.globalUserData.cameras)
{
box = new CheckBox();
box.Text = cam.Nickname;
box.AutoSize = true;
box.CheckedChanged += new EventHandler(CheckedChanged);
pnlCamTicky.Controls.Add(box);
}
我的活动:
private void CheckedChanged(object sender, EventArgs e)
{
foreach (Control c in pnlCamTicky.Controls)
{
if (c is CheckBox)
{
if (((CheckBox)c).Checked)
{
chkAllCameras.Checked = false;
}
else
{
chkAllCameras.Checked = true;
}
}
}
}
但这仅适用于在表单上动态创建的LAST复选框。我认为在创建新复选框时会覆盖事件处理程序连线。
如何动态创建复选框,然后将它们全部连接到同一个事件处理程序?
答案 0 :(得分:0)
“else”声明导致了问题。如果删除了它,它就可以工作,但是如果选中了NONE的复选框,则需要单独的逻辑。
答案 1 :(得分:0)
尝试使用变量:
bool somethingChecked = false;
foreach (CheckBox cb in pnlCamTicky.Controls.OfType<CheckBox>()) {
if (cb.Checked) {
somethingChecked = true;
}
}
chkAllCameras.Checked = somethingChecked;
答案 2 :(得分:0)
作为一个奇特的一个班轮:
chkAllCameras.Checked = pnlCamTicky.Controls.OfType<CheckBox>().All(c => c.Checked);