domingo, 10 de julio de 2016

Receta C# No. 7-3: Procesamiento de los Controles de un Formulario

Índice

1. Introducción
2. Palabras Clave
3. Problema
4. Solución
5. Discusión de la Solución
5.1 Jerarquía de herencia
5.2 WinForms nativo
5.3 WinForms de Telerik
5.4 WinForms de DevExpress
6. Práctica: Procesamiento Genérico de Controles
7. Conclusiones
8. Literatura & Enlaces

1. Introducción

En una aplicación con interfaz gráfica de usuario puede resultar necesario llevar a cabo el procesamiento genérico de todos los controles que la integran. Esta receta C# presenta una implementación algorítmica recursiva para cambiar el contenido textual de ciertos controles que conforman un formulario de tres clases homólogas: Form, RadForm y XtraForm.

2. Palabras Clave

  • Control
  • DevExpress
  • GUI
  • Interfaz gráfica de usuario
  • Procesamiento genérico
  • Recursividad
  • Telerik
  • WinForms

3. Problema

Cambiar la propiedad Text de controles de entrada de texto y presentación de texto.

4. Solución

El programador puede escribir una implementación recursiva para tratar las propiedades comunes en objetos en una jerarquía de herencia.

5. Discusión de la Solución

5.1 Jerarquía de herencia

Una jerarquía de herencia modelada siguiendo los principios de programación orientada a objetos facilita el procesamiento genérico de funciones -método, propiedades-. Esto ocurre con el modelamiento de los controles de interfaz gráfica de usuario.

En esta receta C# se describe cómo procesar de forma genérica-recursiva controles contenidos en un formulario. La implementación recursiva empieza con el control padre (formulario) y efectúa un recorrido por los controles hijo (anidados) hasta alcanzar el nivel de profundidad final.

5.2 WinForms nativo

Los controles usados de la suite nativa de Microsoft .NET Framework comprende los siguientes:
  • System.Windows.Forms.Button
  • System.Windows.Forms.Label y 
  • System.Windows.Forms.TextBox.
Todos estos controles cuentan con la propiedad Text ("Control.Text Property", 2016) debido a que heredan de la clase padre de controles visuales de interfaz gráfica de usuario.

En la sección práctica se demuestra cómo cambiar esta propiedad para controles de tipo TextBox.

5.3 WinForms de Telerik

De esta suite controles visuales para componer formularios (clase RadForm) con tipos se recurrido a los siguientes:  
  • RadButton
  • RadTextBox, y 
  • RadLabel.
Estos controles también siguen una jerarquía de herencia que facilita hacer un tratamiento genérico de propiedades.

5.4 WinForms de DevExpress

En lo que respecta a DevExpress algunos de los controles para componer una interfaz gráfica de usuario comprende: 
  • SimpleButton
  • TextEdit, y 
  • LabelControl.

6. Práctica: Procesamiento Genérico de Controles

Estas son las implementaciones de esta receta C# en WinForms nativo, Telerik y DevExpress.

6.2 WinForms nativo

El evento personalizado btnProcesarControles_Click(object, EventArgs) (líneas 24-27) invoca al método ProcesarControles() para efectuar el procesamiento genérico y recursivo de los controles que integran la interfaz gráfica de usuario.

Continuando, con el método ProcesarControles(Control) (líneas 33-47) realiza estas operaciones: 
  • Líneas 36-39: Se valida que el control actual de la invocación recursiva se trate de un TextBox. De ser así se cambia el valor de la propiedad común Text a la cadena vacía (línea 38).
  • Líneas 43-46: Por cada control contenido en el objeto Control actual se invoca de forma recursiva al método ProcesarControles().
Este es el resultado de ejecución de esta receta en WinForms nativo: 
Ejecución receta R0703 [WinForms]
Animación 1. Ejecución receta R0703 [WinForms].

6.2 Telerik

El formulario que conforma esta interfaz gráfica hereda de la clase RadForm. Por otra parte, en el método ProcesarControles(Control) se valida que el control actual sea de tipo RadTextBox (líneas 37-40).


Prueba de ejecución receta sobre esta suite: 
Ejecución receta R0703 [Telerik]
Animación 2. Ejecución receta R0703 [Telerik].

6.3 DevExpress

En el método ProcesarControles() (líneas 33-47) se evalúa que el control de tipo de dato Control sea DevExpress.XtraEditors.TextEdit. Cuando el predicado es verdadero se asigna a la propiedad Text el valor de cadena vacía.

Prueba de ejecución: 
Ejecución receta R0703 [DevExpress]
Animación 3. Ejecución receta R0703 [DevExpress].

7. Conclusiones

Se ha comprendido que el procesamiento genérico facilita manipular propiedades de controles visuales. Esta receta demostró que a través de una implementación genérica se puede escribir un algoritmo recursivo para recorrer los controles integrales de la GUI.

La próxima receta C# será una gran oportunidad para rastrear los formularios visibles de una aplicación.

8. Literatura & Enlaces

Jones, A., Freeman (2010). Visual C# 2010 Recipes: A Problem-Solution Approach. United States: Apress.
Control.Text Property (System.Windows.Forms) (2016, julio 10). Recuperado desde: https://msdn.microsoft.com/en-us/library/system.windows.forms.control.text(v=vs.110).aspx


V

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.