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を実装しようとしましたが、これは効果がありませんでした。(フィールドを使用している理由は、これが例であり、説明しているトピックとは関係のない数十行を追加したくないためです。)
正直なところ、このようにアイテムを更新しようとしたことはありません。以前は、アイテムを編集するのではなく、常にアイテムを追加/削除していました。そのため、この作業を行う方法がわからないことに気づいたことはありません。
それで、私は何が欠けていますか?