gravatar

Incorporar hojas de propiedades (PropertyGrid) a nuestros proyectos

image 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

imageEl 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.




gravatar

Si estan interesados en hacer intercambio de enlaces (tecnologia, informatica, relacionados)contactame en link.exchange.mariana@gmail.com

gravatar

Estaria bien que añadieses la definicion de la clase XYZ, para ver como publica sus atributos.

gravatar

Hola buenas tardes!!

Solo queria pregunarte si es posible y como puedes localizar/Globalizar dicho propertyGrid. Lo que pasa es que mi app soporta Español/Ingles pero quiero que DisplayText de la propiedad tambien sea Localizable.
Alguna idea?
Gracias

gravatar

hola me quedo una duda, cuando creas las variables de colores, el tipo "Color" no me aparece com oun tipo valido, a que se debe esto??

gravatar

Te felicito porque esto está muy bien, pero cuando intento entrar en los tutoriales me pide contraseña de servidor y password.Lo puedes arreglar?.Gracias

gravatar

Gracias.

¿En qué enlace te da el fallo?

Saludos.