求VB.net代码(把一个listbox被选中的记录添加到另一个listbox)
求代码 VB.NET 实现:我要求的是最常规的用按钮来移到,有《 ,< ,>, 》,四个按钮,怎么进行两个listbox间的操作 --------------------编程问答--------------------Dim i As Integer
For i = 0 To Me.ListBox1.Items.Count - 1
If Me.ListBox1.Items(i).Selected Then
Me.ListBox2.Items.Add(Me.ListBox1.Items(i))
Me.ListBox1.Items.RemoveAt(i)
End If
Next
这是我自己写的一个方法:把listbox1选中的项添加到listbox2中
出现一个问题:就是我选取最后一项添加到listbox2没问题,但是其他所有项都会报错:
索引超出范围。必须为非负值并小于集合大小。 参数名: index
我的listbox1里面的数据是绑定数据库的,我的绑定也放在Page_Load的 Not IsPostBack 中。
请求解决办法 --------------------编程问答-------------------- 不应该在循环中删除元素。。。
--------------------编程问答-------------------- Dim i As Integer
For i = 0 To Me.ListBox1.Items.Count - 1
If Me.ListBox1.Items(i).Selected Then
Me.ListBox2.Items.Add(Me.ListBox1.Items(i))
End If
If Me.ListBox1.Items(i).Selected Then
Me.ListBox1.Items.Remove(i)
End If
Next
--reply by CSDN Study V1.0.0.3 (starts_2000) --------------------编程问答-------------------- Dim i As Integer
For i = 0 To Me.ListBox1.Items.Count - 1
If Me.ListBox1.Items(i).Selected Then
Me.ListBox2.Items.Add(Me.ListBox1.Items(i))
End If
If Me.ListBox1.Items(i).Selected Then
Me.ListBox1.Items.Remove(i)
End If
Next
Dim i As Integer
For i = 0 To Me.ListBox1.Items.Count - 1
If Me.ListBox1.Items(i).Selected Then
Me.ListBox2.Items.Add(Me.ListBox1.Items(i))
End If
next i
For i = 0 To Me.ListBox1.Items.Count - 1
If Me.ListBox1.Items(i).Selected Then
Me.ListBox1.Items.Remove(i)
End If
Next i
--reply by CSDN Study V1.0.0.3 (starts_2000) --------------------编程问答-------------------- 要从后面开始删除 --------------------编程问答-------------------- 循环换成倒序就没事了 --------------------编程问答--------------------
做数据集绑定,你删除的时候,删除数据集上的值,不是控件上的值~然后刷新显示,就可以了~~
--------------------编程问答-------------------- For i = Me.ListBox1.Items.Count - 1 to 0 step -1
......
--------------------编程问答-------------------- vb2014 兄弟,你的这个我测试了,是不行的,但是你加上
Me.lbxRight.SelectionMode = ListSelectionMode.Multiple 就没问题。其实你的代码跟我他的差不多,你的这句Me.ListBox2.Items.Add(Me.ListBox1.Items(i))
你这样循环添加就是多选一次添加,虽然你每次只添加一项,但你右边添加多少项就有多少项处于被选中状态,虽然你每次点击添加按钮页面被刷新一次,
我个人认为就是右边得到的添加项只是对右边项的一个引用,在内存中就是以i为顺序的引用,等你添加了一项后,内存中就加一项,一只到你程序结束内存才释放,
我这样写就可以,也不用设置右边的LISTBOX为多选
Dim i As Integer
For i = 0 To Me.lbxLeft.Items.Count - 1
If Me.lbxLeft.Items(i).Selected Then
If Not Me.lbxRight.Items.Contains(Me.lbxLeft.SelectedItem) Then '右边LISTBOX已有的项则不允许插入
Me.lbxRight.Items.Add(New ListItem(Me.lbxLeft.Items(i).Text, Me.lbxLeft.Items(i).Value))
End If
End If
Next
这个问题其实我也不太理解,我想请大家一起看看这个过程是怎么进行的 --------------------编程问答-------------------- 刚才试过 循环换成倒序 也不行,现在我问题是解决了 但是我想知道问题出在哪里 这样两种不同的添加两种过程是什么样的,往得到解释
当被添加的LISTBOX为单选的话,循环用:Me.ListBox2.Items.Add(Me.ListBox1.Items(i))
是不行的,循环用:Me.lbxRight.Items.Add(New ListItem(Me.lbxLeft.Items(i).Text, Me.lbxLeft.Items(i).Value))
是可以的。
但是 当被添加的LISTBOX为多选的话,循环用 Me.ListBox2.Items.Add(Me.ListBox1.Items(i))
也是可以的 --------------------编程问答-------------------- 请问我的问题不够明朗吗? --------------------编程问答-------------------- 中间讨论的啥没看,这个按理说是个很简单的问题。
10楼说没碰到, Me.ListBox1.SelectionMode 只有 SelectionMode.One SelectionMode.None SelectionMode.MultiSimple SelectionMode.MultiExtended 四种没你写的ListSelectionMode.Multiple
下面代码在你第一次给的代码基础上更改,测试通过,单选多选均通过。
Dim i As Integer--------------------编程问答-------------------- 这问题,LZ不能自己解决吗?
'操作的是选择项,则该直接用选择项来处理效率更高
'For i = 0 To Me.ListBox1.Items.Count - 1
If Me.ListBox1.SelectedItems Is Nothing Then
Exit Sub
End If
Dim b As ListBox.ObjectCollection
'循环所有选择项
For i = 0 To Me.ListBox1.SelectedItems.Count - 1
'必定是选择项不需要在判断
'If Me.ListBox1.Items(i).Selected Then
'直接添加到box2(注意操作项固定为0,原因是每次移除选择项后,循环中Me.ListBox1.SelectedItems.Count的值每次循环都是重新计算的,这里移除一项,就会-1,而i是累加的不能直接用,这里也就相当于循环重新开始的可以固定为0,便于理解的话用倒序就没可以直接使用i,如果要保持原对应位置,改为固定位置插入即可)
Me.ListBox2.Items.Add(Me.ListBox1.SelectedItems(0))
'移除操作的选择项对应ListBox1的索引
Me.ListBox1.Items.RemoveAt(Me.ListBox1.SelectedIndices(0))
'End If
Next
都这样的话,算了,你懂得.
补充:.NET技术 , VB.NET