Mostrar/Ocultar propiedades de un custom control
Publicado por Iñigo (2 intervenciones) el 29/09/2019 11:56:34
Hola.
Estoy intentando realizar un custom control, el cual deriva de Button.
La cuestión es que quiero crear una serie de propiedades para el editor, de tal forma que cuando arrastres el nuevo botón, tengas disponibles las características en el editor de VStudio.
Hasta ahí, ningún problema. El tema está que en función de lo que elijas en algunas de estas propiedades me gustaría que otras de esas propiedades se hicieran visibles o se ocultaran.
He intentado con Reflection y jugando con la propiedad browsable, y sí, oculto o muestro las propiedades, pero todas a la vez.
Es decir, las propiedades fijas que siempre son visibles tienen Browsable(true), y las que quiero que varíen, no se lo pongo.
La cuestión es que las que no tienen Browsable, entonces se muestran o se ocultan todas a la vez, no haciendo caso a la propiedad que le estoy diciendo que se muestre o se oculte.
Es decir, se ocultan todas o se muestran todas, no la propiedad que yo le digo explícitamente.
En cambio, si uso isReadOnly, ahí si puedo jugar con cada una individualmente.
El código más o menos, es este:
¿Alguna idea para programar lo que quiero hacer?
Estoy intentando realizar un custom control, el cual deriva de Button.
La cuestión es que quiero crear una serie de propiedades para el editor, de tal forma que cuando arrastres el nuevo botón, tengas disponibles las características en el editor de VStudio.
Hasta ahí, ningún problema. El tema está que en función de lo que elijas en algunas de estas propiedades me gustaría que otras de esas propiedades se hicieran visibles o se ocultaran.
He intentado con Reflection y jugando con la propiedad browsable, y sí, oculto o muestro las propiedades, pero todas a la vez.
Es decir, las propiedades fijas que siempre son visibles tienen Browsable(true), y las que quiero que varíen, no se lo pongo.
La cuestión es que las que no tienen Browsable, entonces se muestran o se ocultan todas a la vez, no haciendo caso a la propiedad que le estoy diciendo que se muestre o se oculte.
Es decir, se ocultan todas o se muestran todas, no la propiedad que yo le digo explícitamente.
En cambio, si uso isReadOnly, ahí si puedo jugar con cada una individualmente.
El código más o menos, es este:
1
2
3
4
5
6
7
8
9
10
PropertyDescriptor descriptor = TypeDescriptor.GetProperties(this.GetType())[propertyName];
BrowsableAttribute attribute = (BrowsableAttribute)
descriptor.Attributes[typeof(BrowsableAttribute)];
System.Reflection.FieldInfo fieldToChange = attribute.GetType().GetField("browsable",
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance);
if (fieldToChange != null) fieldToChange.SetValue(attribute, isBrowsable);
this.Refresh();
}
¿Alguna idea para programar lo que quiero hacer?
Valora esta pregunta


0