VB   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了[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! __________________________________________________________________________ 呵呵,问题解决就好! 其实从你的 进一步实验表明 中就能完全判定错误之处了! __________________________________________________________________________

大佬总结

以上是大佬教程为你收集整理的[VB.NET]一个关于VB2005中 listbox的奇怪的问题全部内容,希望文章能够帮你解决[VB.NET]一个关于VB2005中 listbox的奇怪的问题所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。