C#中我非常搞不明白的问题 高手来帮忙

mydreamf 2006-03-30 11:29:17
请看两段代码:
第一段:
string select = listBox1.SelectedItem.ToString();
listBox1.Items.Insert(listBox1.SelectedIndex+2, select);
listBox1.Items.Remove(listBox1.SelectedItem);
第二段:
string select = listBox1.SelectedItem.ToString();
listBox1.Items.Insert(listBox1.SelectedIndex - 1, select);
listBox1.Items.Remove(listBox1.SelectedItem);

代码很简单 就是listbox中的项 向上和向下移动
但是第二段代码 无法达到预期的效果 除非将listBox1.Items.Remove(listBox1.SelectedItem)改为
listBox1.Items.RemoveAt(listBox1.SelectIndex)

望各路大虾指点迷津
...全文
210 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
mydreamf 2006-03-31
  • 打赏
  • 举报
回复
谢谢各位拉,我要非常努力才行啦
downmoon 2006-03-30
  • 打赏
  • 举报
回复
当然这样! 你产生了两个名称一样的ListItem所以ListBox1.Items.Remove(listBox1.SelectedItem)移去两项,
只能用listBox1.Items.RemoveAt(listBox1.SelectIndex)
Knight94 2006-03-30
  • 打赏
  • 举报
回复
if( listBox1.SelectedItem != null )
{
string select = listBox1.SelectedItem.ToString();
int nIndex = listBox1.SelectedIndex;
if( nIndex > 0 )
{
listBox1.Items.Remove(listBox1.SelectedItem);
listBox1.Items.Insert( nIndex - 1, select);
listBox1.SelectedIndex = nIndex - 1;
}
}
mydreamf 2006-03-30
  • 打赏
  • 举报
回复
大虾们帮忙看看阿
mydreamf 2006-03-30
  • 打赏
  • 举报
回复
是的 index改变 但是这并不影响 请详细看看代码
zhaiyf 2006-03-30
  • 打赏
  • 举报
回复
因为你插入之后index 变了吧?
Neu_Theone 2006-03-30
  • 打赏
  • 举报
回复
恩,经我测试,Boreas是正确的
mydreamf 2006-03-30
  • 打赏
  • 举报
回复
可是为什么两段一样得代码,为什么就不同呢。如果楼上所说的成立那么第一段的代码应该也执行不了啊?可是第一段的却可以执行

qqq123 2006-03-30
  • 打赏
  • 举报
回复
ListBox.Items.Remove(Object obj)方法在集合中寻找一个与 obj“相等“的item,然后将他删除。

可能1:
listBox1.SelectedItem 的类型是String. 所以 select = listBox1.SelectedItem;
可能2:
listBox1.SelectedItem 的类override了Equals方法并有下面的代码。
public override bool Equals(object obj)
{
return obj == null ? false : obj.ToString() == this.ToString();
}

BTW:
强烈建议先删除后添加。
Knight94 2006-03-30
  • 打赏
  • 举报
回复
当然了,因为你用的是Remove,为什么呢
当你插入两个相同的值的时候,且没有其他什么附加说明,那么仅从显示的值来说,即使ListBox也分不出第一个和第二个的区别,那么删除的时候,当然删除最早出现的。

而且msdn中也说明,如果知道index了,用RemoveAt要准确的多。
mydreamf 2006-03-30
  • 打赏
  • 举报
回复
我的意思是说:上面两段代码是分开的
第一段的删除selectItem是可以实现的
第二段去却不行
问题在于这里 为什么会出现这种情况呢?
大家都是selectItem 只是插入的位子改变了而已 为什么第二段代码就不行呢?

111,119

社区成员

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

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

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