PropertyGrid ExpandableObjectConverter集合属性List(Of T)具有构造函数和ReadOnly属性

时间:2015-12-09 07:25:09

标签: vb.net typeconverter

我有一个在通用列表中使用的类型,它具有构造函数参数,该参数是列表本身。 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,还是需要覆盖其他方法?!!

1 个答案:

答案 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,幸运的是我的模块,表格和类都在同一个项目中,否则生活会很困难!