Je suis en train de faire un exemple pour quelqu'un qui n'a pas encore réalisé que les commandes comme ListBox
n'ont pas à contenir des chaînes; il avait été le stockage formaté de cordes et de sauter à travers compliqué l'analyse des cerceaux pour obtenir les données de retour de l' ListBox
et j'aimerais lui montrer il ya une meilleure façon.
J'ai remarqué que si j'ai un objet stocké dans l' ListBox
puis de mettre à jour une valeur qui affecte ToString
, l' ListBox
ne met pas à jour lui-même. J'ai essayé de les appeler, Refresh
et Update
sur le contrôle, mais aucun ne fonctionne. Voici le code de l'exemple que j'utilise, cela nécessite que vous faites glisser un contrôle listbox et un bouton sur le formulaire:
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
J'ai pensé que peut-être que le problème a été en utilisant les champs et essayé de la mise en œuvre de INotifyPropertyChanged, mais cela n'a eu aucun effet. (La raison pour laquelle je suis à l'aide de champs, parce que c'est un exemple et je n'ai pas envie d'ajouter quelques dizaines de lignes qui n'ont rien à voir avec le sujet je suis à la démonstration.)
Honnêtement, je n'ai jamais essayé la mise à jour des articles dans ce genre d'endroit avant; dans le passé, j'ai toujours été l'ajout/suppression d'éléments, ne pas les modifier. Donc, je n'ai jamais remarqué que je ne sais pas comment faire ce travail.
Donc ce qui me manque?