Estoy haciendo un ejemplo para alguien que aún no se ha dado cuenta de que los controles como ListBox
no tienen que contener cadenas; había estado almacenando cadenas formateadas y saltando a través de aros de análisis complicados para recuperar los datos del ListBox
y me gustaría mostrarle que hay una mejor manera.¿Cómo hago que un ListBox actualice el texto de su elemento?
Me di cuenta de que si tengo un objeto almacenado en el ListBox
, entonces actualizo un valor que afecta a ToString
, el ListBox
no se actualiza. Intenté llamar al Refresh
y Update
en el control, pero ninguno de los dos funciona. Aquí está el código del ejemplo que estoy usando, se le requiere para arrastrar un cuadro de lista y un botón en el formulario:
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
pensé que tal vez el problema estaba usando campos y trató de implementar INotifyPropertyChanged, pero esto no tuvo efecto. (La razón por la que estoy usando campos es porque es un ejemplo y no tengo ganas de agregar algunas docenas de líneas que no tienen nada que ver con el tema que estoy demostrando)
Honestamente, nunca he intentado actualizar artículos en su lugar como este antes; en el pasado, siempre he estado agregando/eliminando elementos, no editándolos. Entonces nunca me di cuenta de que no sé cómo hacer que esto funcione.
Entonces, ¿qué es lo que me falta?
Esto es en realidad menos trabajo que la respuesta actualmente aceptada. ¡Magnífico! Edité tu publicación para incluir un ejemplo. – OwenP
En realidad podrías mejorarlo más, creo. Puede aplicar enlaces padre e hijo a controles, lo que significa que podría prescindir del controlador de eventos _SelectedIndexChanged. Sin embargo, olvidé el código exacto ..... :( – Quibblesome
He actualizado el ejemplo, quitando el controlador de eventos SelectedIndexChanged y reemplazando con 2 nuevas líneas en el controlador de carga. :) – Quibblesome