C# 我正在使用方法调用器删除我的usercontrol,但当我使用foreach时,它的计数总是小于1
这是我的调用函数,我正在使用它,因为它来自另一个线程抱歉,我是新来的C# 我正在使用方法调用器删除我的usercontrol,但当我使用foreach时,它的计数总是小于1,c#,winforms,C#,Winforms,这是我的调用函数,我正在使用它,因为它来自另一个线程抱歉,我是新来的 private void Invoke() { try { if (this.InvokeRequired) { this.Invoke(new MethodInvoker(delegate { Invoke(); })); } else { removeUc();
private void Invoke()
{
try
{
if (this.InvokeRequired)
{
this.Invoke(new MethodInvoker(delegate { Invoke(); }));
}
else
{
removeUc();
}
}
catch (Exception ex)
{
XtraMessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
这是我的删除函数,我的问题是,例如,我有3个usercontrol,但它只删除了2个,它总是留下一个usercontrol,我想删除所有
private void removeUc()
{
foreach (UserControl uc in fPanel.Controls)
{
fPanel.Controls.Remove(uc);
}
}
{
var forremovation=新列表();
//创建删除列表
foreach(fPanel.Controls中的用户控制uc)
{
删除。添加(uc);
}
//从fpanel上拆下
foreach(用于删除的用户控制uc)
{
fPanel.控件。移除(uc);
}
}
这种情况(语言不可知)的一般规则是:
- 如果已知集合是数组或类似数组的集合,即可通过索引访问,并且
移动以下所有项的索引: → 然后您只需向后迭代它(使用删除
而不是for
)。foreach
- 如果收集是可编辑的,但无法对内部数据结构进行假设:
→ 然后创建要删除的元素列表/数组,
然后在第二个循环中删除它们(如apomene的回答)
private void removeUc()
{
var forRemoval = new List<UserControl>();
//Create removal list
foreach (UserControl uc in fPanel.Controls)
{
forRemoval.Add(uc);
}
//remove from fpanel
foreach (UserControl uc in forRemoval)
{
fPanel.Controls.Remove(uc);
}
}