Rank noob再次使用Winforms学习C#。我正在练习将复选框添加到面板,然后将其删除。 “开始按钮”按钮添加复选框。这可行。 “ remove_button”按钮应该删除所有这些按钮。但事实并非如此。通过使用#号复选框,我发现它会删除所有其他复选框。再次单击,它会删除其余所有其他对象,依此类推,直到它们全部消失。
为什么?
谢谢, 阿拉姆
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace playingWithPanels
{
public partial class Form1 : Form
{
CheckBox chkBox;
TextBox txtBox;
public Form1()
{
InitializeComponent();
}
private void start_button_Click(object sender, EventArgs e)
{
txtBox = new TextBox();
txtBox.BringToFront();
txtBox.Text = "Textbox";
txtBox.Location = new Point(30, 10);
panel1.Controls.Add(txtBox);
for (int i =0;i<20;i++)
{
chkBox = new CheckBox();
chkBox.BringToFront();
chkBox.Text = "Checkbox_" + i.ToString();
chkBox.Name = "Checkbox_" + i.ToString();
chkBox.AutoSize = true;
chkBox.Location = new Point(30, 40 + 25 * i);
panel1.Controls.Add(chkBox);
}
}
private void remove_button_Click(object sender, EventArgs e)
{
foreach (var ctrl in panel1.Controls.OfType<CheckBox>())
{
panel1.Controls.Remove(ctrl);
}
}
}
}
答案 0 :(得分:4)
因为使用迭代器并在此期间修改了集合。使用以下方法:
var controls = panel1.Controls.OfType<CheckBox>().ToArray();
foreach (var ctrl in controls)
{
panel1.Controls.Remove(ctrl);
}