ID、Text、Colourなどのいくつかのパブリックプロパティと「SelectedItem」と呼ばれるブール値を保持する非常に単純なクラスがあります。RadioButtonsのプロパティと同様に、特定のグループ内でプロパティを設定Checked
できるのは1つのアイテムのみです。注:いくつかの個別のグループ(リスト)があり、それぞれが。を含むアイテムを1つだけ持つことができます。SelectedItem
True
SelectedItem = True
私の最初の考えは、おそらくクラス外のすべてを処理する必要があり、別のアイテムが選択されたときに特定のリスト内の他のすべてのアイテムに設定SelectedItem
する必要があるということでした。False
しかし、それは私にはかなりエレガントではないようです。だから私はこれがクラス内でどのように行われるのかを考えようとしてきました。例:「GroupName」というプライベート文字列プロパティ(New
クラスの新しいインスタンスを追加するときにサブに設定)を設定し、プライベート共有メソッドを使用してすべてのアイテムのSelectedItem
プロパティをFalse
に設定できますか?アイテムに同じものがある場合GroupName
新しく選択したアイテムとして?私はこれをやろうと思っていますが、そのクラス内からクラスのすべてのインスタンスを列挙する方法、またはそれが可能かどうかさえわかりません。それは...ですか?または、私の目標を達成するための別の(より良い)方法はありますか?
編集
すべての提案とコメントをありがとう、それらはすべて非常に感謝しています。
TimとCyborgx37のコメントに基づいて、私は彼らのアドバイスに従い、CollectionBaseをアイテムマネージャークラスとして使用することにしました。これは私がこれまでに得たものの縮小版です:
Public Class ResourceItem
Public ID As Integer
Public Text As String
Public SelectedItem As Boolean
End Class
Public Class ResourceItemsManager
Inherits System.Collections.CollectionBase
Public Sub Add(ByVal iID As Integer, ByVal sText As String)
Dim newResItem As New ResourceItem
With newResItem
.ID = iID
.Text = sText
End With
List.Add(newResItem)
End Sub
Default Public ReadOnly Property Item(ByVal Index As Integer) As ResourceItem
Get
If Index < Count And Index >= 0 Then
Return CType(List.Item(Index), ResourceItem)
Else
Return Nothing
End If
End Get
End Property
Public Sub ClearAll()
List.Clear()
End Sub
Public Sub SelectItem(ByVal Index As Integer)
If Index < Count And Index >= 0 Then
For i As Integer = 0 To List.Count - 1
List.Item(i).SelectedItem = i = Index
Next
Else
'Exception code here
End If
End Sub
End Class
ResourceItem
ご覧のとおり、新しいものをインスタンス化してそれをマネージャーのAdd
プロシージャへの引数として渡す代わりに、新しいアイテムの詳細を渡すだけで、プロシージャはそれらからアイテムを作成します。これが良いアイデアか悪いアイデアかはわかりませんが、アドバイスしてください。ただし、SelectedItemプロパティをマネージャーだけが書き込み可能にする方法がわからなかったため、直接アクセスできないようにしたかったのです。同じグループ内の他のすべてのアイテムの選択を解除せずにSelectedItem
プロパティを設定できるオブジェクト。True
もちろん、それでもマネージャーのリスト項目の1つに変数を設定し、そこから設定する可能性は残っているので、可能であれば、それを防ぐ方法を知りたいと思います。
更新
私は最終的に上記のコードを使用せず、代わりにCyborgx37のソリューションを使用することにしました。これは、ベストプラクティスに関する警告にもかかわらず、私にとっては完全にうまく機能しているようです。また、複数のアイテムを選択できる別のシナリオで同じクラスを使用する必要があることもわかったので、それを有効にするためにブール型プロパティをマネージャーに追加するのは簡単でした。