- PR -

プロパティ値により、プロパティグリッドのオブジェクトを切り替えるには?

1
投稿者投稿内容
らっき
会議室デビュー日: 2002/05/13
投稿数: 8
投稿日時: 2007-03-08 13:48
お世話になっております。
VB.net2005で開発をしております。

現在、以下のクラスがあります。
・TestCollectionコレクションクラス
・Testクラス
・Testパターン1クラス
・Testパターン2クラス

1.TestCollectionコレクションクラスをプロパティに持つクラスを生成して、プロパティグリッドに表示します
2.そして、TestCollectionコレクションクラスのプロパティを選択するとコレクションエディタが表示されます
3.コレクションエディタでTestクラスを追加
4.追加したTestクラスのプロパティが表示される

TestクラスのTypeプロパティを切り替えることでTestパターン1クラス又はTestパターン2クラスに切り替えてプロパティグリッドに表示したいのですがうまくいきません。
こういうことはできないのでしょうか?


以下、作成したソースです。
コード:

Public Enum ENUM_CLASS_TYPE As Integer
    パターン1
    パターン2
End Enum

Public Class TestCollection
    Inherits System.Collections.CollectionBase

    Public Sub Add(ByVal add As Test)
        List.Add(add)
    End Sub

    Public Sub Remove(ByVal index As Integer)

        If index > Count - 1 Or index < 0 Then
            Throw New Exception("インデックスの範囲外です")
        Else
            List.RemoveAt(index)
        End If

    End Sub

    Public Property Item(ByVal index As Integer) As Test
        Get
            Return CType(List.Item(index), Test)
        End Get
        Set(ByVal value As Test)
            List.Item(index) = value
        End Set
    End Property

    Protected Overrides Sub OnInsertComplete(ByVal index As Integer, ByVal value As Object)
        CType(value, Test).Target = List
    End Sub

End Class

Public Class Test

    Private _TestItem As Test
    Private _TestItems As New TestCollection
    Private _Type As ENUM_CLASS_TYPE = ENUM_CLASS_TYPE.パターン1
    Private _Target As System.Collections.IList
    Private _TargetNo As Integer

    Public Property TargetNo() As Integer
        Get
            Return _TargetNo
        End Get
        Set(ByVal value As Integer)
            _TargetNo = value
        End Set
    End Property

    Public Property Target() As System.Collections.IList
        Get
            Return _Target
        End Get
        Set(ByVal value As System.Collections.IList)
            _Target = value
        End Set
    End Property

    Public Property Type() As ENUM_CLASS_TYPE
        Get
            Return _Type
        End Get
        Set(ByVal Value As ENUM_CLASS_TYPE)
            _Type = Value
            If _Type = ENUM_CLASS_TYPE.パターン2 Then
                Me.Target.Item(Me.TargetNo) = New Testパターン2
            End If
        End Set
    End Property

    Public Property TestItem() As Test
        Get
            Return _TestItem
        End Get
        Set(ByVal Value As Test)
            _TestItem = Value
        End Set
    End Property

    Public Property TestItems() As TestCollection
        Get
            Return _TestItems
        End Get
        Set(ByVal Value As TestCollection)
            _TestItems = Value
        End Set
    End Property
End Class

Public Class Testパターン1
    Inherits Test

    Public ReadOnly Property AAAAA() As Integer
        Get
            Return 0
        End Get
    End Property
End Class

Public Class Testパターン2
    Inherits Test

    Public ReadOnly Property BBBBB() As Integer
        Get
            Return 0
        End Get
    End Property
End Class

1

スキルアップ/キャリアアップ(JOB@IT)