注册 登录
编程论坛 新人交流区

求助,关于listbox删除项的问题

狂砍程序 发布于 2007-10-01 16:02, 966 次点击
我要点击清楚按扭时listbox2里面不是mp3文件就删除它,我现在的这程序能删除,但每次都是择半删除的,不是一次性删除的,帮我看下错哪了哈
private void Clear_Click(object sender, EventArgs e)
{
for (int i = 0; i < listBox2.Items.Count - 1; i++)
{
int n = listBox2.Items[i].ToString().LastIndexOf(".") + 1;
if (listBox2.Items[i].ToString().Substring(n, 3) != "mp3")
{
listBox2.Items.Remove(listBox2.Items[i]);
}
}

}
11 回复
#2
狂砍程序2007-10-01 16:39
看了回复一下啊
#3
缘吇弹2007-10-01 17:07
已阅.
#4
Knocker2007-10-01 17:15
[QUOTE]i < listBox2.Items.Count - 1;[/QUOTE]

#5
狂砍程序2007-10-01 17:59
能告诉我这句话错哪了么,该怎么改呢?
#6
紫梦2007-10-01 20:54
路过一下~~~
#7
Knocker2007-10-01 21:21
以下是引用狂砍程序在2007-10-1 16:02:15的发言:
我要点击清楚按扭时listbox2里面不是mp3文件就删除它,我现在的这程序能删除,但每次都是择半删除的,不是一次性删除的,帮我看下错哪了哈
private void Clear_Click(object sender, EventArgs e)
{

//假定listBox2.Items.Count 初始值为4,其中1,2(listBox2.Items[0],listBox2.Items[1])是要删除的
//当 i=0 时, listBox2.Items.Remove(listBox2.Items[0]),这时listBox2.Items.Count 值改变为3,listBox2.Items[1]成listBox2.Items[0]),而i这时自增为1
//那么,原先的listBox2.Items[1],现在的listBox2.Items[0]就跳过了
//listBox2.Items.Remove是删除一个子Item吧?如果是,就是这个原因
for (int i = 0; i < listBox2.Items.Count - 1; i++)
{
int n = listBox2.Items[i].ToString().LastIndexOf(".") + 1;
if (listBox2.Items[i].ToString().Substring(n, 3) != "mp3")
{
listBox2.Items.Remove(listBox2.Items[i]);
}
}

}

#8
狂砍程序2007-10-02 22:21
太感谢你了
#9
Knocker2007-10-03 11:19

注意这种不良用法

for (int i = 0; i < listBox2.Items.Count - 1; i++)

如果编译器不会对此优化的话,效率是极差的,因为每 i++ 次,就要重新 listBox2.Items.Count 一次

应该:
int listCount = listBox2.Items.Count ;
for (int i = 0; i < listCount - 1; i++)

#10
沦落地球2007-10-03 11:33
学习学习...
#11
heris2007-10-05 10:15
明白了,编程习惯很重要
#12
tengchao9982007-10-23 16:53

唉!
正确的应该是这样的

private void Clear_Click(object sender, EventArgs e)
{
for (int i = listBox2.Items.Count - 1; i >= 0; i--) //i递减
{
int n = listBox2.Items[i].ToString().LastIndexOf(".") + 1;
if (listBox2.Items[i].ToString().Substring(n, 3) != "mp3")
{
listBox2.Items.Remove(listBox2.Items[i]);
}
}

}

1