假设在窗体上放了6个button的控件,name属性分别为button1...button6 则下面的程序有什么问题吗?
---------------------
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < this.Controls.Count; i++)
{
Control cc = this.Controls[i];
if (cc is Button)
{
string name = cc.Name;
name = name.Substring(6);
if (int.Parse(name) >= 3)
{
this.Controls.RemoveAt(i);
}
}
}
}
----------------------------------
经测试 它不能一次性把name属性为button3...button6清除,这是软件的bug?
-----------------------------
换句话说,如何正确的一次清除控件集合中的多个对象?
-------------------------
清除单个控件好像不是问题
c# 如何一次性清除控件集合中的多个控件
答案:1 悬赏:70 手机版
解决时间 2021-03-15 17:40
- 提问者网友:夢醒日落
- 2021-03-14 18:52
最佳答案
- 五星知识达人网友:忘川信使
- 2021-03-14 19:08
是你写的不对
每次移除控件,它的索引值都变了。你这样写是不行的
using System.Collections.Generic;
List<Control> al = new List<Control>();
for (int i = 0; i < this.Controls.Count; i++)
{
Control cc = this.Controls[i];
if (cc is Button)
{
string name = cc.Name;
name = name.Substring(6);
if (int.Parse(name) >= 3)
{
al.Add(cc);
}
}
}
foreach (object os in al)
{
this.Controls.Remove((Control)os);
}
}
每次移除控件,它的索引值都变了。你这样写是不行的
using System.Collections.Generic;
List<Control> al = new List<Control>();
for (int i = 0; i < this.Controls.Count; i++)
{
Control cc = this.Controls[i];
if (cc is Button)
{
string name = cc.Name;
name = name.Substring(6);
if (int.Parse(name) >= 3)
{
al.Add(cc);
}
}
}
foreach (object os in al)
{
this.Controls.Remove((Control)os);
}
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯