Como faço para que uma ListBox atualize o texto do item?
Estou dando um exemplo para alguém que ainda não percebeu que controles comoListBox
não precisa conter strings; ele estava armazenando seqüências de caracteres formatadas e pulando em complicadas análises para obter os dados de volta doListBox
e gostaria de mostrar a ele que há uma maneira melhor.
Eu notei que se eu tiver um objeto armazenado noListBox
atualize um valor que afetaToString
, aListBox
não se atualiza. Eu tentei ligar paraRefresh
eUpdate
no controle, mas também não funciona. Aqui está o código do exemplo que estou usando; ele exige que você arraste uma caixa de listagem e um botão para o formulário:
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
Pensei que talvez o problema estivesse usando campos e tentei implementar o INotifyPropertyChanged, mas isso não teve efeito. (O motivo pelo qual estou usando campos é porque é um exemplo e não tenho vontade de adicionar algumas dezenas de linhas que nada têm a ver com o tópico que estou demonstrando.)
Honestamente, eu nunca tentei atualizar itens no lugar como este antes; no passado, sempre adicionei / removi itens, não os editei. Portanto, nunca notei que não sei como fazer isso funcionar.
Então, o que estou perdendo?