假设Form窗休中有3个按扭 执行如下代码
foreach(Control item in this.Controls)
{
this.Controls.Remove(item);
}
为什么不能一次性移除窗体中的控件
foreach(Control item in this.Controls)
{
this.Controls.Remove(item);
}
为什么不能一次性移除窗体中的控件
解决方案 »
- 我写的定时关机的程序。但是却不能定时,帮忙看一下,好像是timer那些地方有问题还是。。
- 一套面试题,请大家帮帮忙,我统计下正确答案后来共享:
- 请问怎么使用委托把方法传递过去,谢谢指教 在线急等
- 如何将CSV文件导入到Access中?
- 怎么判断textbox中的字符类型是数字还是其他?
- 如何控制DataGrid某一列的可见性?
- 怎么在aspx里面的javascript中调用cs中变量的值
- C# winform怎么用chart控件实时绘制采集到的速度和扭力曲线
- 如何把一段字符串转换为base64编码?
- C#代码实现
- 高分求助:c#实示智能语法加亮!!!!
- 如何用C#从COM1中获得用遥控器发送的数据呢?
看看是不RemoveAt
好像是因为这个button被移除后,它的Click事件就不再执行了。
直接放在页面的paint中就可移除所有控件。
比如
foreach(Control item in this.Controls)
{
if(item.Name!="btnExit")
{
this.Remove(item);
}
}
却达不到我的效果,控件除了btnExit外还有别的控件
foreach 语句为数组或对象集合中的每个元素重复一个嵌入语句组。foreach 语句用于循环访问集合以获取所需信息,但不应用于更改集合内容以避免产生不可预知的副作用
我想我就是受到副作用了
this.Controls集合被你改变了。foreach 不能正确枚举了。
{
if (this.Controls[i].Name != "btnExit")
{
this.Controls.Remove(this.Controls[i]);
}
}
foreach (Control item in Controls)
{
if (item.Name != "btnExit")
{
list.Add(item);
}
}
foreach (Control item in list)
{
Controls.Remove(item);
}
就可以了
其次检查你的控件是否包含在容器中比如panle
List<Control> list = new List<Control>();
foreach (Control item in Controls)
{
if (item.Name != "btnExit")
{
list.Add(item);
}
}
foreach (Control item in list)
{
Controls.Remove(item);
}多开一个list不要开销吗?
int x = this.Controls.Count() - 1;
for (int i = x; i < 0; x--)
{
if (this.Controls[i].Name != "btnExit")
{
this.Controls.Remove(this.Controls[i]);
}
}从集合的最后一个找起,如果符合条件踢出去就是了。
可能foreach里面移除机制就像list下表一样...移除一个2的下标原来下标3的值就跑到2了,应该是算法问题....貌似系统这样的算法目的是提高它的效率吧
那也应该是 i >= 0; i-- for (int i = x; i >= 0; i--)
晕:
Count 后面的 () 也必须去掉。
{
List<Control> list = new List<Control>();
foreach (Control c in this.Controls)
{
if (c.Name != name) // 此处修改可以改变想删除的对象.
list.Add(c);
}
foreach (Control c in list)
{
this.Controls.Remove(c);
} }
public void RemoveControl(string name)
{
for ( int i =this.Controls.Count-1 ;i>=0 ;i--)
{
if (this.Controls[i].Name != name )
this.Controls.Remove(this.Controls[i]);
}
}
无聊,把上两个方法整理了下.