问题描述
窗体上有10几个动态添加的label控件,现在想根据name一次性删除,但是遍历删除只会删除一半为什么,应该是这10几个都会删除~~~?
解决方案
解决方案二:
递归谢谢
解决方案三:
foreach(Controlobj5inthis.Controls)//判断界面上的控件{if(obj5.GetType.ToString()="System.Windows.Forms.Label")//如果控件是lable{//此时只要执行你的删除控件代码即可}}
解决方案四:
没说的,递归
解决方案五:
给一个递归代码啊,三位LS的~~~多谢
解决方案六:
privatevoiddelLabel(controlcon){foreach(Controlobjincon.Controls){if(obj.GetType.ToString()="System.Windows.Forms.Label")//如果控件是lable{//此时只要执行你的删除控件代码即可}delLabel(obj);}}
调用时传this进去就行了
解决方案七:
引用5楼slin60的回复:
C#codeprivatevoiddelLabel(controlcon){foreach(Controlobjincon.Controls){if(obj.GetType.ToString()="System.Windows.Forms.Label")//如果控件是lable{//此时只要执行你的删除控件代码即可}delLabel(obj);}}调用时传this进去就行了
学习
解决方案八:
引用楼主jackeyabc的帖子:
窗体上有10几个动态添加的label控件,现在想根据name一次性删除,但是遍历删除只会删除一半为什么,应该是这10几个都会删除~~~?
这是因为在foreach遍历时,删除控件,使得this.controls发生了变化.少了数据元素,结果只能删除一半.
解决方案九:
解决方法:for(inti=0;i<this.Controls.Count;i++){//注意:Controls中的控件是动态变化的.foreach(Controlconinthis.Controls){if(conisLabel)this.Controls.Remove(con);}}
解决方案十:
现在想想楼上说的有理
解决方案十一:
问题已经解决,跟大家共享,其实楼上几位的也不能解决问题,我刚刚也是按照那个方法~~~publicstaticvoidRemoveControl(Controlc,stringR_name){inti=0;object[]obj=newobject[ControlCount(c,R_name)];foreach(Controlchinc.Controls){if((chisLabel)){if(ch.Name.Substring(0,2)==R_name){obj[i]=ch;i++;}}}for(intx=0;x<obj.Length;x++){c.Controls.Remove((Label)obj[x]);}}
解决方案十二:
引用10楼jackeyabc的回复:
问题已经解决,跟大家共享,其实楼上几位的也不能解决问题,我刚刚也是按照那个方法~~~publicstaticvoidRemoveControl(Controlc,stringR_name){inti=0;object[]obj=newobject[ControlCount(c,R_name)];foreach(Controlchinc.Controls){if((chisLabel)){…
来晚了,这种情况就是用循环倒着来就可以了,用foreach也没办法解决成员被删除后的指针重定位
解决方案十三:
楼上正解!!!!!!!!!!
解决方案十四:
递归的应该没问题
解决方案十五:
引用10楼jackeyabc的回复:
问题已经解决,跟大家共享,其实楼上几位的也不能解决问题,我刚刚也是按照那个方法~~~publicstaticvoidRemoveControl(Controlc,stringR_name){inti=0;object[]obj=newobject[ControlCount(c,R_name)];foreach(Controlchinc.Controls){if((chisLabel)){…
很好!!
解决方案:
for(inti=0i<this.Controls.Count;i++)//判断界面上的控件{Controlobj5=this.Controls[i];if(obj5.GetType.ToString()="System.Windows.Forms.Label")//如果控件是lable{this.Controls.Remove(i);i--;//此时只要执行你的删除控件代码即可}}
解决方案:
真理总是后来出现,前面总是审题不仔细。
解决方案:
每天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分
解决方案:
最简单的代码来了====================================privatevoidbutton6_Click(objectsender,EventArgse){for(inti=0;i<this.Controls.Count;i++){if(Controls[i]isLabel){this.Controls.Remove(Controls[i]);i--;}}}
解决方案:
是不是这年头for循环只用来递增了?for(inti=this.Controls.Count-1;i>=0;i--){if(this.Controls[i]isLabel){this.Controls.RemoveAt(i);}}
解决方案:
支持楼上的!~
解决方案:
经过我实例操作验证8楼是正确的,其他有问题的。
解决方案:
主要是Lz删除一个后集合的长度变化了。导致只能删除一半。
解决方案:
学到知识了
解决方案:
如果是使用循环的话。。从后面向前面删除。。就会删除完整了。。