我正在为尚未意识到控件之类的控件ListBox
不必包含字符串的人举个例子;他一直在存储格式化的字符串并跳过复杂的解析箍以将数据从其中取出,ListBox
我想向他展示有更好的方法。
我注意到,如果我有一个对象存储在ListBox
then 更新一个影响 的值,ToString
则ListBox
不会更新自身。我试过打电话Refresh
和Update
控制,但都不管用。这是我正在使用的示例的代码,它需要您将列表框和按钮拖到表单上:
Public Class Form1
Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
MyBase.OnLoad(e)
For i As Integer = 1 To 3
Dim tempInfo As New NumberInfo()
tempInfo.Count = i
tempInfo.Number = i * 100
ListBox1.Items.Add(tempInfo)
Next
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
For Each objItem As Object In ListBox1.Items
Dim info As NumberInfo = DirectCast(objItem, NumberInfo)
info.Count += 1
Next
End Sub
End Class
Public Class NumberInfo
Public Count As Integer
Public Number As Integer
Public Overrides Function ToString() As String
Return String.Format("{0}, {1}", Count, Number)
End Function
End Class
我认为问题可能出在使用字段并尝试实现INotifyPropertyChanged,但这没有效果。(我使用字段的原因是因为它是一个示例,我不想添加与我正在演示的主题无关的几十行。)
老实说,我以前从未尝试过像这样更新项目;过去我一直在添加/删除项目,而不是编辑它们。所以我从来没有注意到我不知道如何使这项工作。
那么我错过了什么?