データのリストを収集してリストまたは配列に配置し、インデックスを使用するのではなく、リスト内の各項目で変数 (コントロールのタグ プロパティなど) を使用して簡単に引き出すことができるかどうかに興味があります。例は、フォームに多くのコントロールがあり、リストを使用して値を入力したいが、多くの異なるインデックスをクロスチェックする必要がある (時間がかかる) 代わりに、ラベルをいくつかに割り当てることができる場合です。リスト項目の「tag like」変数。
これは可能ですか?
クラスなどの .NET のリストは、List(Of T)
アイテムごとに 1 つのオブジェクトの格納のみをサポートします。ただし、それらの美しさは、必要なあらゆるタイプのオブジェクトを格納できることです。データとともにメタデータを保存する必要がある場合は、各アイテムのすべてのデータを保持する新しいクラスを作成するだけです。例えば:
Public Class MyControlData
Public Property LabelText As String
Public Property Value As String
End Class
次に、次のように項目をリストに追加できます。
Dim dataList As New List(Of MyControlData)()
Dim item As New MyControlData()
item.LabelText = "Name"
item.Value = "Bob"
dataList.Add(item)
そして、次のようにリストからデータを読み取ることができます。
For Each i As MyControlData in dataList
Label1.Text = i.LabelText
TextBox1.Text = i.Value
Next
LINQ を使用できます。
Dim myTagControls = From ctrl In Me.Controls.Cast(Of Control)()
Where "your-tag".Equals(ctrl.Tag)
For Each ctrl In myTagControls
Console.WriteLine("Tag:{0} Name:{1}", ctrl.Tag, ctrl.Name)
Next
キーを使用してデータを簡単に参照できるように、Dictionaryオブジェクトを使用します。