wrap a class during runtime

eric101

Newcomer
Joined
Dec 17, 2008
Messages
1
Hi,

I need to wrap a class and change its attributes to readonly during
run-time. My class has primitive datatype properties and a lot of properties
with class datatype. I have a code sampe that wrap "partially" of the class
properties. So far, all of the datatypes could be wrap except for class
datatype.

Thanks so much
Code:
Dim cloneObj as New DeepCloneObject(MyObject)
Dim ro as New ReadOnlyTypeDescriptor(cloneObj)
PropertyGrid1.SelectedObject = ro
 
---------------------------------------------------------------------------------------------------------
 
 
Public Class ReadOnlyTypeDescriptor 
    Inherits CustomTypeDescriptor 
    Private mComponent As Object 
    
    Public Sub New(ByVal component As Object) 
        MyBase.New(TypeDescriptor.GetProvider(component).GetTypeDescriptor(component)) 
        mComponent = component 
    End Sub 
    
    Public Overloads Overrides Function GetProperties(ByVal attributes As Attribute()) As PropertyDescriptorCollection 
        Dim inPdc As PropertyDescriptorCollection = MyBase.GetProperties(attributes) 
        
        Dim pdcs As PropertyDescriptor() = New PropertyDescriptor(inPdc.Count - 1) {} 
        For i As Integer = 0 To pdcs.Length - 1 
            If inPdc(i).IsReadOnly Then 
                pdcs(i) = inPdc(i) 
            Else 
                pdcs(i) = New ReadOnlyPropertyDescriptor(inPdc(i)) 
            End If 
        Next 
        
        Return New PropertyDescriptorCollection(pdcs, True) 
    End Function 
    
    Public Overloads Overrides Function GetProperties() As PropertyDescriptorCollection 
        Return GetProperties(Nothing) 
    End Function 
    
    Private Class ReadOnlyPropertyDescriptor 
        Inherits PropertyDescriptor 
        Private mParent As PropertyDescriptor 
        
        Public Sub New(ByVal parent As PropertyDescriptor) 
            MyBase.New(parent, New Attribute() {ReadOnlyAttribute.Yes}) 
            mParent = parent 
        End Sub 
        
        Public Overloads Overrides Function CanResetValue(ByVal component As Object) As Boolean 
            Return False 
            ' Read Only 
        End Function 
        
        Public Overloads Overrides ReadOnly Property ComponentType() As Type 
            Get 
                Return mParent.ComponentType 
            End Get 
        End Property 
        
        Public Overloads Overrides Function GetValue(ByVal component As Object) As Object 
            Return mParent.GetValue(component) 
        End Function 
        
        Public Overloads Overrides ReadOnly Property IsReadOnly() As Boolean 
            Get 
                Return True 
            End Get 
        End Property 
        
        Public Overloads Overrides ReadOnly Property PropertyType() As Type 
            Get 
                Return mParent.PropertyType 
            End Get 
        End Property 
        
        Public Overloads Overrides Sub ResetValue(ByVal component As Object) 
            ' Read Only 
        End Sub 
        
        Public Overloads Overrides Sub SetValue(ByVal component As Object, ByVal value As Object) 
            ' Read Only 
        End Sub 
        
        Public Overloads Overrides Function ShouldSerializeValue(ByVal component As Object) As Boolean 
            Return mParent.ShouldSerializeValue(component) 
        End Function 
    End Class 
End Class
 
Back
Top