[VB.NET]一个关于VB2005中 listbox的奇怪的问题
2008-12-27 14:02
691 查看
<script type="text/javascript"><!--
google_ad_client = "pub-8333940862668978";
/* 728x90, 创建于 08-11-30 */
google_ad_slot = "4485230109";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
一个关于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问题
- 一个奇怪的(VB.NET)问题
- 关于vb.net里面api Unicode/ANSI调用一个问题解答
- [VB.NET]关于VB2005创建NT服务的问题.
- [VB.NET]一个关于Tooltip 的小问题???
- 一个关于在VB.NET中应用超级解霸的问题
- [VB.NET]关于OleDbDataAdapter的Fill问题
- .NET的世界里,入门的VB / C#语法转换不该是一个问题。
- [VB.NET]关于datagridview数据绑定菜鸟问题!!
- [VB.NET]问个关于internet收藏页的问题
- [VB.NET]关于datatable在datagrade中显示的格式问题(在线)
- [VB.NET]请教!!!关于DateTimePicker的问题....
- [VB.NET]关于进销存“移动加权平均”的问题,请教各位大虾,
- 一个奇怪的关于脚本的问题
- 想请教大家一个vb.net问题
- 关于随机数的一个奇怪问题
- 一个关于Unicode字符编码的奇怪问题
- 关于adsl宽带猫的一个奇怪问题
- 关于VB.net代码转化为C#代码出现的一些问题
- 一个关于NTFS权限/DTS/ASP.Net的问题解决过程