【发布时间】:2015-11-02 19:20:45
【问题描述】:
我正在尝试根据用户输入的数据在面板上动态创建复选框。如果选中其中任何一个,我想在面板外部取消选中另一个复选框。看起来像这样:
[]全部
[]具体1 []具体2 []具体3
这就是我创建复选框的方式:
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 复选框。我认为创建新复选框时会覆盖事件处理程序接线。
如何动态创建复选框,然后将它们全部连接到同一个事件处理程序?
【问题讨论】:
-
您使用的是始终相同的 chkAllCamers 复选按钮。您应该在该循环中使用变量 c
-
循环中的最后一个复选框始终以该逻辑获胜。
-
是的,chkAllCameras 不是循环通过的控件之一。它需要根据是否检查任何正在循环的控件进行更改。我认为如果我从事件处理程序中删除“else”语句,它会起作用,因为我是个笨蛋。所以如果没有选中任何复选框,我只需要有单独的逻辑。谢谢。
-
问题不在于事件没有针对每个复选框触发,而是您在事件中所做的事情。注意
sender参数是被改变的复选框,同时注意它会在复选框被选中和未选中时触发,所以你需要更正你的逻辑。
标签: c#