c# winform 循环ListBox自动选中

zy2010ds 2010-11-10 03:16:21
我要做一个 窗体 ,窗体上放一个 ListBox控件,根据OpenFileDilog大开TXT文件,将文件里每行数据添加到ListBox中,然后我点击按钮进行循环ListBox,当每循环到一个ListBox中的项的时候把循环到的项选中,然后自动将选中的项移除。

请问各位大侠 我应该怎么做

以下红色部分为循环代码 循环的时候报告索引越界;
for (int i = 0; i < listBox1.Items.Count; i++)
{
//索引数组越界listBox1.SelectedItem = listBox1.SelectedItems[i];
string text = listBox1.SelectedItem.ToString();
listBox1.Items.RemoveAt(listBox1.SelectedIndex);
}


请各位大侠指教。
...全文
340 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
全栈深入 2010-11-11
  • 打赏
  • 举报
回复

for (int i = listBox1.Items.Count;i>0; i--)
{
listBox1.SelectedItem = listBox1.SelectedItems[i-1]; //这里改成i-1,数组是从0开始的
//string text = listBox1.SelectedItem.ToString();
listBox1.Items.RemoveAt(listBox1.SelectedIndex);
}

哥子谭 2010-11-10
  • 打赏
  • 举报
回复
你循环的多了
whrspsoft3723 2010-11-10
  • 打赏
  • 举报
回复
for (int i = listBox1.Items.Count-1;i>=0; i--)
{
listBox1.SelectedIndex = i;

listBox1.Items.RemoveAt(listBox1.SelectedIndex);
}

试下这个,看如何
明哥说编程 2010-11-10
  • 打赏
  • 举报
回复
int listCount=listBox1.Items.Count;

for (int i =listCount-1 ;i>=0; i--)
{
listBox1.SelectedItem = listBox1.SelectedItems[i];
listBox1.Items.RemoveAt(listBox1.SelectedIndex);
}
kscode 2010-11-10
  • 打赏
  • 举报
回复
listBox1.Items.RemoveAt(0);
老董杂货铺 2010-11-10
  • 打赏
  • 举报
回复
for (int i = listBox1.Items.Count-1;i>=0; i--)
{
listBox1.SelectedItem = listBox1.SelectedItems[i];
//string text = listBox1.SelectedItem.ToString();
listBox1.Items.RemoveAt(listBox1.SelectedIndex);
}
兔子-顾问 2010-11-10
  • 打赏
  • 举报
回复
while(listBox1.Items.Count>0)
{
listBox1.SelectedIndex = 0;
string text = listBox1.Items[0].ToString();
listBox1.Items.RemoveAt(0);
}
lonyjianhui 2010-11-10
  • 打赏
  • 举报
回复

for (int i = 0; i < listBox1.Items.Count; i++)
{
listBox1.SelectedItem = listBox1.SelectedItems[i];//这句很有问题
listBox1.Items.RemoveAt(listBox1.SelectedIndex);
}

别说你那个SelectedItems不断变动,就是不变也是实现不了的。
eg:listBox1.Items.Count=2;
i=0时,移除1个SelectedItem,listBox1.Items.Count=1;
i=1时,由于i < listBox1.Items.Count(1<1)不成立,退出,还有一个SelectedItem没有移除。
lonyjianhui 2010-11-10
  • 打赏
  • 举报
回复
错了,的确是你循环体的问题
lonyjianhui 2010-11-10
  • 打赏
  • 举报
回复
这跟这里的循环语句米关系,是其他地方
zy2010ds 2010-11-10
  • 打赏
  • 举报
回复
仁兄 反过来不行啊 仍然是数组越界。
全栈深入 2010-11-10
  • 打赏
  • 举报
回复
你循环反过来:


for (int i = listBox1.Items.Count;i>0; i--)
{
listBox1.SelectedItem = listBox1.SelectedItems[i];
//string text = listBox1.SelectedItem.ToString();
listBox1.Items.RemoveAt(listBox1.SelectedIndex);
}




没有测试,反过来就不会数组越界了.

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧