Ocultar/Mostrar propiedad en PropertyGrid

03/09/2004 - 12:40 por Fer | Informe spam
Alguien sabe como puedo hacer para mostrar/ocultar una
propiedad de una clase en un PropertyGrid en función del
valor de otra propiedad de la misma clase?

Se que con las atributos de la propiedad se puede hacer en
tiempo de diseño, pero ¿tambien se puede hacer en tiempo
de ejecución?

Gracias.
 

Leer las respuestas

#1 Eduardo A. Morcillo [MS MVP VB]
03/09/2004 - 18:08 | Informe spam
Se que con las atributos de la propiedad se puede hacer en
tiempo de diseño, pero ¿tambien se puede hacer en tiempo
de ejecución?



Si, se puede hacer creando un TypeConverter para la clase. Por ejemplo, si
la clase tienes dos propiedades, Prop y MostrarProp, el TypeConverter seria
asi:

Public Class MyTypeConverter
Inherits System.ComponentModel.TypeConverter

Public Overloads Overrides Function GetProperties( _
ByVal context As System.ComponentModel.ITypeDescriptorContext, _
ByVal value As Object, _
ByVal attributes() As System.Attribute) As
System.ComponentModel.PropertyDescriptorCollection

' Obtengo una coleccion de PropertyDescriptor
' con todas las propiedades visibles de la clase
Dim props As PropertyDescriptorCollection TypeDescriptor.GetProperties(value, attributes)

' Creo una nueva coleccion de PropertyDescriptors
Dim propsc As New PropertyDescriptorCollection(Nothing)

Dim ctrl As MiControl = DirectCast(value, MiControl)

' Copio los PropertyDescriptors de una coleccion a la otra
For Each propdesc As PropertyDescriptor In props

' Copio la propiedad Prop solo si MostrarProp es True
If (propdesc.Name = "Prop" And ctrl.MostrarProp = True) Or _
propdesc.Name <> "Propiedad1" Then
propsc.Add(propdesc)
End If

Next

' Devuelvo la coleccion
Return propsc

End Function

Public Overloads Overrides Function GetPropertiesSupported( _
ByVal context As System.ComponentModel.ITypeDescriptorContext) As
Boolean

' Indico que GetProperties esta implementado
Return True

End Function

End Class

En la clase deberas agregar unos atributos para indicar el TypeConverter y
que se refresque la ventana de propiedades al cambiar el valor de
MostrarProp:

<TypeConverter(GetType(MyTypeConverter))> _
Public Class MiControl
Inherits System.ComponentModel.Component

Private _prop As String
Private _mostrarProp As Boolean = True

Public Property Prop() As String
Get
Return _prop
End Get
Set(ByVal value As String)
_prop = value
End Set
End Property

<RefreshProperties(RefreshProperties.All)> _
Public Property MostrarProp() As Boolean
Get
Return _mostrarProp
End Get
Set(ByVal value As Boolean)
_mostrarProp = value
End Set
End Property

End Class

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo

Preguntas similares