Jim*_*hen 1 c# collections winforms
我正在尝试从面板中删除所有按钮。不知何故,它只用我的代码删除了一半。我不知道为什么。这是在 c# windows 形式。有人可以解释一下吗。谢谢你。代码如下:添加使用
for(int ii=1; ii<=6; ii++)
{
for(int jj=1; jj<=5; jj++)
{
Button b = new Button();
b.TabStop = false;
b.Width = 146;
b.Height = 91;
b.Click += new EventHandler(b_Click);
panel.Controls.Add(b);
}
}
Run Code Online (Sandbox Code Playgroud)
删除使用
foreach (Control c in panel.Controls)
{
c.Click -= new EventHandler(this.b_Click);
panel.Controls.Remove(c);
c.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
您的控件列表迭代到一半,因为迭代器增加而项目数量减少。在您的控制列表(内部)索引的中间大于项目的数量。
首先保存项目列表:
List<Button> buttons = panel.Controls.OfType<Button>().ToList();
foreach (Button btn in buttons)
{
btn.Click -= new EventHandler(this.b_Click); //It's unnecessary
panel.Controls.Remove(btn);
btn.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
编辑:如果处理按钮,为什么要删除 Click-Event?处理后,事件被清除,按钮也无法使用。´
如果您想要 1 行解决方案,则只能使用 Dispose。它将自动从面板中删除按钮并清除所有事件等。
panel.Controls.OfType<Button>().ToList().ForEach(btn => btn.Dispose());
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3090 次 |
最近记录: |