我寫過一個繼承自System.Windows.Forms.ComboBox的自定義ComboBox控件。它有我寫了一個「Value」屬性如下:爲什麼向類屬性添加<Browsable(False)>屬性會阻止FilterItemOnProperty()正確檢索屬性的值?
Public Property Value() As Object
Get
If SelectedIndex = -1 Then Return Nothing
If String.IsNullOrWhitespace(ValueMember) Then
Return Items(SelectedIndex)
Else
Return FilterItemOnProperty(Items(SelectedIndex), ValueMember)
End If
End Get
Set(ByVal newvalue As Object)
'...
End Set
End Property
基本上,讀取值如果沒有被選中將返回Nothing
,所選擇的對象本身,如果ValueMember沒有設置,或相應的屬性值如果設置了ValueMember,則選定的對象。
到目前爲止,代碼工作得很好。
然而,最近的變化已經被用來填充組合框類的一個製作如下:
Partial Public Class Modality
<Browsable(False)>
Public Property ModalityID As Integer
Public Property ModalityName As String
Public Property ModalityAbbrevName As String
End Class
的ModalityID屬性,它被用作ComboBox的ValueMember,已經具備了可瀏覽(False)屬性,因此當Modality對象集合被綁定到應用程序中其他位置的DataGridView控件時,它不會顯示爲列。
這現在打破了應用程序,因爲即使ComboBox的ValueMember仍設置爲「ModalityID」,MyComboBox1.Value現在將返回選定的Modality對象,而不是所選的Modality對象的ModalityID。
深入研究.NET Framework的源代碼ListControl.FilterItemOnProperty(object item, string field)
並不是對我的啓發。
問題是,爲什麼向類屬性添加<Browsable(False)>
屬性會阻止FilterItemOnProperty()
正確檢索屬性的值?
您是否試過編寫一個簡單的測試應用程序來驗證它是導致問題的BrowsableAttribute?也許還有另外一個你沒有意識到或忘記的修改。 – 2013-03-15 21:58:54
我還沒有創建一個測試應用程序,但是這是在代碼昨天工作和今天工作不正常的時候提交給源代碼控制庫的兩個更改之一(提交的另一個更改是無關的代碼段)。我通過從屬性中移除了'BrowsableAttribute'進一步驗證了它,並且代碼再次運行。 – MCattle 2013-03-15 22:15:49