Jump to content
Xtreme .Net Talk

Recommended Posts

Posted

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

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...