用foreach遍历panel中的控件,删除被选中的panel(每一行都是一个panel)
private void button7_Click(object sender, EventArgs e)
{
foreach (Control ctr in panelCmd.Controls)
{
if (ctr is CmdControl)
{
CmdControl control = (CmdControl)ctr;
if (control.IsChecked == true)
{
panelCmd.Controls.Remove(control);
}
}
}
}
发现每次点击按钮,不能一次性删除所有被选中的,每次都是删除一半。
改用for循环:
private void button7_Click(object sender, EventArgs e)
{
//foreach (Control ctr in panelCmd.Controls)
//{
// if (ctr is CmdControl)
// {
// CmdControl control = (CmdControl)ctr;
// if (control.IsChecked == true)
// {
// panelCmd.Controls.Remove(control);
// }
// }
//}
List<CmdControl> control = new List<CmdControl>();
foreach (CmdControl ctr in panelCmd.Controls)
{
control.Add(ctr);
}
for (int i = 0; i < panelCmd.Controls.Count; i++)
{
if (control[i].IsChecked == true)
{
panelCmd.Controls.Remove(control[i]);
}
}
}
发现还是一样。
原因:每次remove控件的时候,panel的count已经发生改变。
最终修改如下:
private void button7_Click(object sender, EventArgs e)
{
List<CmdControl> control = new List<CmdControl>();
foreach (CmdControl ctr in panelCmd.Controls)
{
control.Add(ctr);
}
for (int i = panelCmd.Controls.Count - 1; i >= 0; i--)
{
if (control[i].IsChecked == true)
{
panelCmd.Controls.Remove(control[i]);
}
}
}