我foreach
在按钮单击事件处理程序中有一个循环,我用它来摆脱所有位于 Y 轴上同一点的控件。我有一个添加一行的控件,然后我需要用户可以选择删除他们不想添加的行。
当我单独使用foreach
循环时,它总是会遗漏两项——每次都是相同的两项。我已经确认 Y 值实际上是相同的。如果我继续运行该函数,它会在运行三次后删除该行上的所有控件。但是,如果我使用所有相同的值嵌套foreach
循环,它就可以工作。请参阅下面的代码。
这似乎是一种非常草率的方法,但它也是唯一对我有用的解决方案。我看到其他几个帖子说要在循环中声明第二个变量(即Control z = c; if(z.Location....)
)。这对这里的行为没有任何影响。谁能解释为什么foreach
循环本身不起作用?如何在没有重复嵌套的情况下修复它?
在职的:
internal void MinButt_Click(object sender, EventArgs e)
{
Scratch.tScratch.panel2.Controls.RemoveByKey("Record" + arrDynamY[0].ToString());
foreach (Control c in Scratch.tScratch.panel2.Controls)
{
if (c.Location.Y == arrDynamY[1])
{
c.Dispose();
}
foreach (Control ctrl in Scratch.tScratch.panel2.Controls)
{
if (ctrl.Location.Y == arrDynamY[1])
{
ctrl.Dispose();
}
}
}
}
每次都错过相同的两个控件:
internal void MinButt_Click(object sender, EventArgs e)
{
Scratch.tScratch.panel2.Controls.RemoveByKey("Record" + arrDynamY[0].ToString());
foreach (Control c in Scratch.tScratch.panel2.Controls)
{
if (c.Location.Y == arrDynamY[1])
{
c.Dispose();
}
}
}