Incorporar hojas de propiedades (PropertyGrid) a nuestros proyectos
El control PropertyGrid (hoja o rejilla de propiedades), es un componente que podemos incluir en nuestros proyectos, como editor de propiedades de aquellos controles u objetos contenidos en el mismo. Su utilización nos permite modificar el valor de una propiedad en tiempo de ejecución, del mismo modo que la ventana de propiedades del IDE de Visual Studio nos permite hacerlo en tiempo de diseño.
Su estructura está formada por dos columnas y tantas filas, como propiedades tenga el control u objeto asociado. La primera columna contiene el nombre de la propiedad y la segunda el valor de la misma. Dichos valores pueden ser introducidos directamente o a través del editor apropiado, que variará en función del tipo de valor.
El control PropertyGrid nos permite dotar de una mayor funcionalidad a nuestras aplicaciones, es una interesante forma de mecanizar la manipulación de propiedades, y ofrece al usuario la posibilidad de personalizar aquellos aspectos para los que hubiese sido programado.
AÑADIENDO UN CONTROL PropertyGrid A NUESTRO PROYECTO
En primer lugar debemos añadir a nuestro proyecto un control PropertyGrid. Ello lo podemos realizar con la siguiente línea de código.
PropertyGrid HojaPropiedades = new PropertyGrid();
ASOCIANDO CONTROLES Y OBJETOS
Como hemos dicho anteriormente, un control PropertyGrid estará normalmente asociado a un control (instancia de una clase perteneciente a Visual Studio u otra suite de terceros), o a un objeto (instancia de una clase creada por nosotros). El control u objeto asociado se seleccionará mediante el uso de la propiedad SelectedObject, y como valor se introducirá el nombre de la instancia elegida.
HojaPropiedades.SelectedObject = Label1; //Selecciona las propiedades del control Label1
HojaPropiedades.SelectedObject = Button1; //Selecciona las propiedades del control Button1
HojaPropiedades.SelectedObject = Entidad3D; //Selecciona las propiedades del objeto Entidad3D
En los dos primeros casos, el control HojaPropiedades mostraría las propiedades de cada uno de los controles asociados. En el tercer caso, las propiedades mostradas serían las que la clase de la que deriva la instancia Entidad3D, tuviese declaradas.
DEFINIENDO LAS PROPIEDADES DE UNA CLASE
Para definir una propiedad dentro de una clase se utiliza la siguiente sintaxis:
[Atributos de la Propiedad] TipoPropiedad NombrePropiedad { set {código para la escritura de los valores} get {código para la lectura de los valores} }
Así de este modo, la definición de la clase Entidad3D, quedaría de la siguiente forma.
1: public class Entidad3D
2: {
3: /// Los campos siguientes son los campos privados de las propiedades
4: /// visibles en la hoja de propiedades.
5: /// categoría General
6: private string _Nombre;
7: private string _Clase;
8: private Color _ColorLineas = SystemColors.ControlLight;
9: private Color _ColorFondo = SystemColors.ControlDarkDark;
10: private string _Grupo;
11: /// categoría Coordenadas XYZ
12: private XYZ _Coordenadas=new XYZ();
13: private XYZ _CoordenadasEjes=new XYZ();
14: /// categoría Modificadores 3D
15: private float _EscalaX;
16: private float _EscalaY;
17: private float _EscalaZ;
18: private float _RotacionX;
19: private float _RotacionY;
20: private float _RotacionZ;
21: /// categoría Estados
22: private bool _Activada;
23: private bool _Visible;
24: private Font _Fuente = new Font("Arial", 8, FontStyle.Regular);
25:
26: /// Definición del código para las propiedades
27: [CategoryAttribute("General"),
28: DescriptionAttribute ("Establece el nombre para la instancia de la clase."),
29: DefaultValueAttribute("Entidad")]
30: public string Nombre
31: {
32: get{return _Nombre;}
33: set{_Nombre = value;}
34: }
35: [CategoryAttribute("General"),
36: DescriptionAttribute ("Muestra el nombre de la clase origen."),
37: ReadOnlyAttribute(true)]
38: public string Clase
39: {
40: get{return _Clase;}
41: set { _Clase = value; }
42: }
43: [CategoryAttribute("General"),
44: DescriptionAttribute ("Establece el color de las líneas en la representación alámbrica.")]
45: public Color ColorLineas
46: {
47: get{return _ColorLineas;}
48: set{_ColorLineas = value;}
49: }
50: [CategoryAttribute("General"),
51: DescriptionAttribute("Establece el color del fondo en la representación alámbrica.")]
52: public Color ColorFondo
53: {
54: get { return _ColorFondo; }
55: set { _ColorFondo = value; }
56: }
57: [CategoryAttribute("General"),
58: DescriptionAttribute ("Muestra el grupo al que pertenece la entidad."),
59: DefaultValueAttribute("Ninguno"),
60: ReadOnlyAttribute(true)]
61: public string Grupo
62: {
63: get { return _Grupo; }
64: set { _Grupo = value; }
65: }
66: [CategoryAttribute("Coordenadas XYZ"),
67: DescriptionAttribute ("Desplegar para establecer las coordenadas de la entidad."),
68: DefaultValueAttribute("0, 0, 0")]
69: public XYZ Coordenadas
70: {
71: get{return _Coordenadas;}
72: set{_Coordenadas = value;}
73: }
74: [CategoryAttribute("Coordenadas XYZ")]
75: public XYZ CoordenadasEjes
76: {
77: get{return _CoordenadasEjes;}
78: set{_CoordenadasEjes = value;}
79: }
80: [CategoryAttribute("Modificadores 3D")]
81: public float EscalaX
82: {
83: get{return _EscalaX;}
84: set{_EscalaX = value;}
85: }
86: [CategoryAttribute("Modificadores 3D")]
87: public float EscalaY
88: {
89: get{return _EscalaY;}
90: set{_EscalaY = value;}
91: }
92: [CategoryAttribute("Modificadores 3D")]
93: public float EscalaZ
94: {
95: get{return _EscalaZ;}
96: set{_EscalaZ = value;}
97: }
98: [CategoryAttribute("Modificadores 3D")]
99: public float RotacionX
100: {
101: get{return _RotacionX;}
102: set{_RotacionX = value;}
103: }
104: [CategoryAttribute("Modificadores 3D")]
105: public float RotacionY
106: {
107: get{return _RotacionY;}
108: set{_RotacionY = value;}
109: }
110: [CategoryAttribute("Modificadores 3D")]
111: public float RotacionZ
112: {
113: get{return _RotacionZ;}
114: set{_RotacionZ = value;}
115: }
116: [CategoryAttribute("Estados")]
117: public bool Activada
118: {
119: get{return _Activada;}
120: set {_Activada = value;}
121: }
122: [CategoryAttribute("Estados")]
123: public bool Visible
124: {
125: get{return _Visible;}
126: set{_Visible = value;}
127: }
128: public Font Fuente
129: {
130: get{return _Fuente;}
131: set{_Fuente = value;}
132: }
133: }
ATRIBUTOS DE LAS PROPIEDADES
En la definición de las propiedades de la clase Entidad3D, se han utilizado algunos atributos especiales. Ello es debido, a que podemos configurar determinadas características de las propiedades de las clases cuyos objetos asociamos a un control PropertyGrid, mediante atributos opcionales incluidos en el espacio System.ComponentModel. Dichos atributos son los siguientes.
-
CategoryAttribute(String) Clasifica las propiedades en grupos.
-
DescriptionAttribute(String) Texto descriptivo que aparece en la parte inferior del PropertyGrid cuando se selecciona la propiedad.
-
BrowsableAttribute(Boolean) Determina si la propiedad se muestra o no en el control. Por defecto el valor es True (verdadero).
-
ReadOnlyAttribute(Boolean) Permite o prohíbe al usuario editar la propiedad para introducir valores. Por defecto el valor es False (falso).
-
DefaultValueAttribute(Object) Establece el valor por defecto de la propiedad.
-
DefaultPropertyAttribute(String) Este atributo no se aplica a una propiedad sino a la clase. Establece la propiedad que aparece seleccionada cuando se entrega el objeto al control.
RESULTADO FINAL
El resultado de lo expuesto en las líneas anteriores sería una hoja de propiedades del objeto Entidad3D, tal y como podemos observar en la imagen de la izquierda.
Espero que os haya gustado.
Un saludo y hasta otra.