Я делаю пример для тех, кто еще не понял, что элементы управления, такие как ListBox
, не должны содержать строки; он сохранял форматированные строки и прыгал через сложные синтаксические обручи, чтобы вернуть данные из ListBox
, и я хотел бы показать ему лучший способ.
Я заметил, что если у меня есть объект, хранящийся в ListBox
, то обновить значение, которое влияет на 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, но это не имело никакого эффекта. (Причина, по которой я использую поля, - это пример, и мне не хочется добавлять несколько десятков строк, которые не имеют никакого отношения к теме, которую я демонстрирую.)
Честно говоря, я никогда не пробовал обновлять элементы, как раньше; в прошлом я всегда добавлял/удалял элементы, а не редактировал их. Поэтому я никогда не замечал, что я не знаю, как это сделать.
Итак, что мне не хватает?