一个关于VB2005中 list
Box的奇怪的问题 我使用多选的list
Box来取得选项的值,不知怎么搞得,总是只能选到list
Box中最后一项的值。 我是这样给list
Box添加选项的: Do Until Rs.EOF TempPeople.Id = Rs.Fields( "id ").Value TempPeople.Name = Rs.Fields( "姓名 ").Value TempPeople.Nickname = Rs.Fields( "昵称 ").Value TempPeople.Sex = Rs.Fields( "性别 ").Value List
Box1.Items.Add(TempPeople) Rs.MoveNext() Loop 这个过程现实的结果是没有问题的,list
Box现实的项是正确的。 但是,之后再
获取list
Box.items或者list
Box.selecteditems中的项时,得到的确实是相同类型的对象,但是只能获得列表中的最后一个对象! 也就是说,我向list
Box添加了张三,李四,王二三个项,能
显示出来。多选后,返回值总是最后一个王二。而且是选了几个项就获得几个王二。不论我选择的是张三和李四,或者是张三和王二,或者是三个都选,selecteditems总是返回2个或3个王二,items里面则全部是王二!这到底是怎么回事?怎么办? __________________________________________________________________________ 跟蹤調試下,看獲取的值是否一樣 __________________________________________________________________________ 试过了,但是监视变量时无法察看items这类集合内的对象,只能看到count等
属性。 __________________________________________________________________________ 看看你设置的List
Box的SelectionMode 正确吗? 我用下面这段
代码试了试,可以正确
显示选中项啊。 Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button1.Click For i As Integer = 0 To List
Box1.SelectedItems.Count - 1 Msg
Box(List
Box1.SelectedItems(i)) Next End Sub Private Sub Form1_Load(ByVal sender As Object,ByVal e As System.EventArgs) Handles Me.Load List
Box1.SelectionMode = SelectionMode.MultiSimple For i As Integer = 0 To 10 List
Box1.Items.Add(String.Format( "Item-{0} ",i)) Next End Sub __________________________________________________________________________ 或许跟这儿有关 Do Until Rs.EOF TempPeople=New People TempPeople.Id = Rs.Fields( "id ").Value TempPeople.Name = Rs.Fields( "姓名 ").Value TempPeople.Nickname = Rs.Fields( "昵称 ").Value TempPeople.Sex = Rs.Fields( "性别 ").Value List
Box1.Items.Add(TempPeople) Rs.MoveNext() Loop __________________________________________________________________________ 是multisimple,确认无误。否则也不能选中多项。 我最奇怪的就是,
显示出来的项是三个不同的项,
获取的items却是相同的项。 为了确认刚才的问题,我又在原来的
代码下面加了一行做测试, Do Until Rs.EOF TempPeople.Id = Rs.Fields( "id ").Value TempPeople.Name = Rs.Fields( "姓名 ").Value TempPeople.Nickname = Rs.Fields( "昵称 ").Value TempPeople.Sex = Rs.Fields( "性别 ").Value List
Box1.Items.Add(TempPeople) Rs.MoveNext() Loop form2.text=list
Box1.items(0).tostring 运行后,list
Box中
显示的依次是张三、李四、王二,而form2.text竟然是王二! 我怀疑是items.add()的问题! __________________________________________________________________________ 监视表明,temppeople是没问题的,每一次循环时都改变了值。 __________________________________________________________________________ Public Class Form1 Class People Public Id As Integer Public Name As String ''省略 End Class Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button1.Click For i As Integer = 0 To List
Box1.SelectedItems.Count - 1 Msg
Box(CType(List
Box1.SelectedItems(i),People).Name) Next End Sub Private Sub Form1_Load(ByVal sender As Object,ByVal e As System.EventArgs) Handles Me.Load List
Box1.SelectionMode = SelectionMode.MultiSimple Dim TempPeople As New People ''注意这儿,
方法一 For i As Integer = 0 To 10 ''Dim TempPeople As New People ''注意这儿,
方法二 TempPeople.Id = i TempPeople.Name = String.Format( "Item-{0} ",i) List
Box1.Items.Add(TempPeople) Next End Sub End Class 看看上面两个注意的地方,两个
方法执行后的结果就不一样了。 第一种类似于你的
方法。你看是不是? __________________________________________________________________________ 进一步实验表明,在循环体内时,items(0),items(1),items(2)还是不同的值,循环体一结束,items(0),items(1)都变成了items(2)一样的值。神了! __________________________________________________________________________ Do Until Rs.EOF TempPeople=New People ''可以判定就这儿的问题了 TempPeople.Id = Rs.Fields( "id ").Value TempPeople.Name = Rs.Fields( "姓名 ").Value TempPeople.Nickname = Rs.Fields( "昵称 ").Value TempPeople.Sex = Rs.Fields( "性别 ").Value List
Box1.Items.Add(TempPeople) Rs.MoveNext() Loop __________________________________________________________________________ wzuomin 你是神!我太崇拜你了!果然是这个问题! 我不知道这个声明摆在循环体外和体内有什么区别,我觉得有一个重赋值的过程就够了嘛。看来我对面向对象的理解还是非常肤浅的。 谢谢wzuomin! __________________________________________________________________________ 呵呵,问题
解决就好! 其实从你的 进一步实验表明 中就能完全判定
错误之处了! __________________________________________________________________________
原文链接:https://www.f2er.com/vb/263988.html