arn*_*ino 2 .net c# controls compact-framework
这段代码有什么问题?
for (int w = 0; w < this.Controls.Count; w++)
{
if (this.Controls[w] is TransparentLabel)
{
la = (TransparentLabel)this.Controls[w];
if (la.Name != "label1")
{
la.Visible = false;
la.Click -= new System.EventHandler(Clicked);
this.Controls.Remove(this.Controls[w]);
la.Dispose();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想从标签中清除屏幕,但它不起作用.
将for更改为:
for (int w = this.Controls.Count - 1; w >= 0; w--)
Run Code Online (Sandbox Code Playgroud)
否则,您可能会收到有关修改控件的错误.否则,如果这没有帮助,并且控件在屏幕上,那么它将与您的if语句评估一起使用.调试有助于解决这个问题.
我认为代码不是删除所有预期的控件?这是因为您要从Control集合中删除一个项目,然后递增w.
你应该叫w--;后this.Controls.Remove(...);
如果w--;在删除控件后没有调用,则将跳过代替控制位置的控件.
只是添加,你真的需要拨打以下电话吗?
la.Visible = false;
la.Click -= new System.EventHandler(Clicked);
la.Dispose();
Run Code Online (Sandbox Code Playgroud)
当您删除控件时,它将变为不可见,无论如何都不会被点击.如果你不重新添加它,它将超出范围并被GC收集.
为了满足评论家的要求,你应该这样做的正确方法是通过ControlCollection向后工作.Brian在他的回答中提到了这一点.