不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii 用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
foreach+Control.Controls无法一次性移除所有子控件解决方法
编辑:dnawo 日期:2009-10-10
复制内容到剪贴板
程序代码

//在panel1中添加20个Button
int row = -1;
int rowcount = 5;
for (int i = 1; i <= 20; i++)
{
if (i % rowcount == 1)
row++;
Button button = new Button();
button.Width = 75;
button.Height = 23;
button.Text = "button" + i.ToString();
button.Top = row * (23 + 2);
button.Left = ((i-1) % rowcount) * (75 + 2);
panel1.Controls.Add(button);
}
int row = -1;
int rowcount = 5;
for (int i = 1; i <= 20; i++)
{
if (i % rowcount == 1)
row++;
Button button = new Button();
button.Width = 75;
button.Height = 23;
button.Text = "button" + i.ToString();
button.Top = row * (23 + 2);
button.Left = ((i-1) % rowcount) * (75 + 2);
panel1.Controls.Add(button);
}
使用foreach+Control.Controls移除所有Button:
复制内容到剪贴板
程序代码

foreach (Control con in panel1.Controls)
panel1.Controls.Remove(con);
panel1.Controls.Remove(con);
结果发现只移除了10个,界面还剩下10个!改用for循环:
复制内容到剪贴板
程序代码

for (int i = 0; i < panel1.Controls.Count; i++)
panel1.Controls.RemoveAt(i);
panel1.Controls.RemoveAt(i);
结果同上,正确的代码应为:
复制内容到剪贴板
程序代码

for (int i = panel1.Controls.Count - 1; i >= 0; i--)
panel1.Controls.RemoveAt(i);
panel1.Controls.RemoveAt(i);
究其原因,应是调用Remove或RemoveAt方法时,也改变了Controls内容所致,做个测试:
复制内容到剪贴板
程序代码

for (int i = 0; i < panel1.Controls.Count; i++)
{
textBox1.Text += string.Format("i值:{0}, Controls.Count值:{1}, 移除:{2}\r\n", i, panel1.Controls.Count, panel1.Controls[i].Text);
panel1.Controls.RemoveAt(i);
}
{
textBox1.Text += string.Format("i值:{0}, Controls.Count值:{1}, 移除:{2}\r\n", i, panel1.Controls.Count, panel1.Controls[i].Text);
panel1.Controls.RemoveAt(i);
}
结果:

i值:0, Controls.Count值:20, 移除:button1
i值:1, Controls.Count值:19, 移除:button3
i值:2, Controls.Count值:18, 移除:button5
i值:3, Controls.Count值:17, 移除:button7
i值:4, Controls.Count值:16, 移除:button9
i值:5, Controls.Count值:15, 移除:button11
i值:6, Controls.Count值:14, 移除:button13
i值:7, Controls.Count值:13, 移除:button15
i值:8, Controls.Count值:12, 移除:button17
i值:9, Controls.Count值:11, 移除:button19
i值:1, Controls.Count值:19, 移除:button3
i值:2, Controls.Count值:18, 移除:button5
i值:3, Controls.Count值:17, 移除:button7
i值:4, Controls.Count值:16, 移除:button9
i值:5, Controls.Count值:15, 移除:button11
i值:6, Controls.Count值:14, 移除:button13
i值:7, Controls.Count值:13, 移除:button15
i值:8, Controls.Count值:12, 移除:button17
i值:9, Controls.Count值:11, 移除:button19
测试发现:移除子控件应尽量用Remove或RemoveAt方法,若使用Clear方法,在多次动态添加/移除控件后,程序占用内存越来越高,估计是Clear没有及时释放资源所致。
评论: 0 | 引用: 0 | 查看次数: 5552
发表评论
请登录后再发表评论!