我有一個非常簡單的類,它擁有一些公共屬性 - ID,文本,顏色等,以及一個名爲'SelectedItem'的布爾值。就像RadioButton上的Checked
屬性一樣,只有一個項目的SelectedItem
屬性可以在特定組內設置爲True
。注意:將會有幾個單獨的組(列表),每個組只允許一個項目與SelectedItem = True
。我如何使一個類屬性行爲像一個RadioButton上的Checked屬性?
我的第一個想法是,我可能只需要處理課外的所有事情,當選擇另一個項目時,將SelectedItem
設置爲False
爲特定列表中的每個其他項目。但對我來說這似乎相當不雅。所以我一直在想如何在範圍內完成這個課程。例如:我可能有一個名爲say「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
而不取消選擇同一組中的所有其他項的對象。當然,仍然有可能將一個變量設置爲經理的列表項目之一,並從那裏設置它,所以我仍然想知道如果可能,我可以如何防止這種情況。
UPDATE
我沒有到底使用上面的代碼,而是決定去與Cyborgx37的解決方案 - 這似乎是儘管對最佳實踐的警告非常清楚對我的工作。我也意識到我需要在另一種情況下使用同一個班級,其中可能可能被選中,所以很容易向管理員添加一個布爾屬性來啓用它。
您可以爲您的自定義類型的集合類繼承['CollectionBase'(http://msdn.microsoft.com/en-us/library/system.collections.collectionbase.aspx)。然後您可以確保只檢查一個相同的組。 –
枚舉你需要某種容器類來了解它們。有幾種方法可以做到這一點,但是在某種程度上,他們都會認真對待(東西),這就是你需要決定的東西的參考。 –
@TimSchmelter在.NET中我仍然有點綠,所以它花了很多時間我有點頭腦發熱。我已經通過這個MS演練:[創建你自己的收藏類](http://msdn.microsoft.com/en-us/library/xth2y6ft%28v=vs.71%29.aspx),我想我'做你的建議 - 它似乎工作無論如何。我已經爲集合類添加了一個名爲'SelectItem'的方法,並且我正在使用它枚舉組中的每個項目並適當地設置它們的檢查狀態。這是你想到的嗎?如果是這樣,有沒有辦法讓SelectedItem屬性只讀集合類除外? – Antagony