我有一个在通用列表中使用的类型,它具有构造函数参数,该参数是列表本身。 E.g。
Class MyCollection(Of T)
Inherits List(Of T)
...
End Class
用于T的实际类声明为:
Class MyClass
Private _Parent As MyCollection
Private _Property1 As String
Private _Property2 As String
Public Sub New(Parent As MyCollection, Property1 As String)
_Parent = Parent
Me.Property1 = Property1
End Sub
...
Public Property Property1 As String
Get
Return _Property1
End Get
Set(value As String)
_Property1 = value
Dim result As String = value
For Each item in Parent
If item Is Me Then
Exit For
End If
...
Next
_Property2 = result
End Set
End Property
Public ReadOnly Property Property2 As String
Get
Return _Property2
End Get
End Property
End Class
如何实现在PropertyGrid中使用的TypeConvertor。 我的Parent属性没有公开,因为我不使用它而不是类本身,而我的Property2是ReadOnly。所以在运行时我的PropertyGrid设计器中我不想看到Parent而我确实希望看到Property2但它应该是只读的。如果我根本不使用TypeConverter,那么为什么当我使用TypeConverter时它不能像我想要的那样工作。没有一个typeconverter添加一个新项目不起作用至少我得到一个错误说" Contructor on Type' MyClass'找不到"所以我假设我需要覆盖CreateInstance和GetCreateInstanceSupported方法。即使我为我的Parent属性创建了一个Property并将Browsable属性设置为False,那么我的CreateInstance方法也没有找到Parent的位置,因为它不在propertyValues中。如果相反显示它并设置ReadOnly属性,它会被看到,它也是可编辑的,我不想要。对于我的Property2也一样,我不希望它在PropertyGrid中可编辑。 ReadOnly似乎被忽略了。我是否还需要为我的MyCollection类使用TypeConverter,还是需要覆盖其他方法?!!
答案 0 :(得分:0)
好吧,似乎我可能会说出明显的答案,因为我猜这个明显的答案总会被忽视。我不得不将我的列表公开为全局变量。所以在我的代码中我说:
Class MyClass
Private _Parent As MyCollection = Nothing
...
Public Sub New()
End Sub
Private ReadOnly Property Parent As MyCollection
Get
If _Parent Is Nothing Then
_Parent = Module1.GlobalParent
End If
Return _Parent
End Get
End Prpoerty
...
Public Property Property1 As String
Get
Return _Property1
End Get
Set(value As String)
_Property1 = value
Dim result As String = value
For Each item in Parent
If item Is Me Then
Exit For
End If
...
Next
_Property2 = result
End Set
End Property
Public ReadOnly Property Property2 As String
Get
Return _Property2
End Get
End Property
...
End Class
即。毕竟没有必要有一个自定义的TypeConverter,幸运的是我的模块,表格和类都在同一个项目中,否则生活会很困难!