ListBox
のようなコントロールが文字列を含む必要がないことをまだ認識していない人のための例を作っています。彼は書式設定された文字列を格納していて、複雑な解析フープを飛び越してListBox
からデータを取り戻しました。私は彼にもっと良い方法があることを示したいと思います。ListBoxでアイテムテキストを更新するにはどうすればよいですか?
オブジェクトがListBox
に保存されていて、ToString
に影響する値を更新すると、ListBox
は更新されません。私はRefresh
とUpdate
をコントロールに呼び出してみましたが、どちらも機能しません。ここで私が使用している例のコードは、それがフォーム上にリストボックスとボタンをドラッグする必要があります、です:私は、おそらく問題のフィールドを使用していたとはをINotifyPropertyChangedの実装しようとしたことを考え
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
が、これを何の効果もありませんでした。 (私がフィールドを使用している理由は、それが例であり、私が主張しているトピックとは何の関係もない数十の行を追加する気がしないからです)。
正直言って私は以前のような場所にあるアイテム。過去に私はアイテムを編集するのではなく、アイテムを追加/削除していました。だから私はこの仕事をする方法がわからないことに気付かなかった。
私は何が欠けていますか?
これは現在受け入れられている回答よりも実際には機能しません。壮大!あなたの投稿を編集して例を挙げました。 – OwenP
あなたは実際にそれをさらに改善することができました。親と子のバインディングは、_SelectedIndexChangedイベントハンドラなしで行うことができるコントロールに適用できます。私は正確なコードを忘れています..... :( – Quibblesome
私は、SelectedIndexChangedイベントハンドラを削除し、Loadハンドラで2行の新しい行に置き換えて、例を更新しました:) – Quibblesome