[VB.NET]一个关于VB2005中 listbox的奇怪的问题

前端之家收集整理的这篇文章主要介绍了[VB.NET]一个关于VB2005中 listbox的奇怪的问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
一个关于VB2005中 listBox的奇怪的问题 我使用多选的listBox来取得选项的值,不知怎么搞得,总是只能选到listBox中最后一项的值。 我是这样给listBox添加选项的: 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 ListBox1.Items.Add(TempPeople) Rs.MoveNext() Loop 这个过程现实的结果是没有问题的,listBox现实的项是正确的。 但是,之后再获取listBox.items或者listBox.selecteditems中的项时,得到的确实是相同类型的对象,但是只能获得列表中的最后一个对象! 也就是说,我向listBox添加了张三,李四,王二三个项,能显示出来。多选后,返回值总是最后一个王二。而且是选了几个项就获得几个王二。不论我选择的是张三和李四,或者是张三和王二,或者是三个都选,selecteditems总是返回2个或3个王二,items里面则全部是王二!这到底是怎么回事?怎么办? __________________________________________________________________________ 跟蹤調試下,看獲取的值是否一樣 __________________________________________________________________________ 试过了,但是监视变量时无法察看items这类集合内的对象,只能看到count等属性。 __________________________________________________________________________ 看看你设置的ListBox的SelectionMode 正确吗? 我用下面这段代码试了试,可以正确显示选中项啊。 Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button1.Click For i As Integer = 0 To ListBox1.SelectedItems.Count - 1 MsgBox(ListBox1.SelectedItems(i)) Next End Sub Private Sub Form1_Load(ByVal sender As Object,ByVal e As System.EventArgs) Handles Me.Load ListBox1.SelectionMode = SelectionMode.MultiSimple For i As Integer = 0 To 10 ListBox1.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 ListBox1.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 ListBox1.Items.Add(TempPeople) Rs.MoveNext() Loop form2.text=listBox1.items(0).tostring 运行后,listBox显示的依次是张三、李四、王二,而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 ListBox1.SelectedItems.Count - 1 MsgBox(CType(ListBox1.SelectedItems(i),People).Name) Next End Sub Private Sub Form1_Load(ByVal sender As Object,ByVal e As System.EventArgs) Handles Me.Load ListBox1.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) ListBox1.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 ListBox1.Items.Add(TempPeople) Rs.MoveNext() Loop __________________________________________________________________________ wzuomin 你是神!我太崇拜你了!果然是这个问题! 我不知道这个声明摆在循环体外和体内有什么区别,我觉得有一个重赋值的过程就够了嘛。看来我对面向对象的理解还是非常肤浅的。 谢谢wzuomin! __________________________________________________________________________ 呵呵,问题解决就好! 其实从你的 进一步实验表明 中就能完全判定错误之处了! __________________________________________________________________________ 原文链接:https://www.f2er.com/vb/263988.html

猜你在找的VB相关文章