viernes, 10 de febrero de 2012

C# – Comunicar formularios de forma desacoplada


Introducción
El objetivo de esta guía es demostrar como posibilitar la comunicación de formulario de una forma optima, haciendo uso de buenas practicas, y además bajando al mínimo el acoplamiento entre los formulario.
Para cumplir el objetivo es que se hará uso de interfaces, las cuales permitirán desacoplar la comunicación entre formulario.
Comunicación simple entre formularios
En este ejemplo se confeccionara una utilidad simple, básicamente se procederá a la apertura de un formulario, y la escritura cuadros de texto.
Primer Paso – Creación de los formularios
Lo primero que será necesario crear son los dos formulario los cuales intervendrán en la comunicación, esta operación se hace de forma simple como seguramente ya es conocida por todos. Los mismos contaran con sus respectivos cuadros de texto, y botones que permitirán las acciones entre ellos
Segundo Paso - Definición de la interfaz
En al interfaz se definirá la acción que será llevada a cabo en la comunicación, en este caso sera algo simple como copiar el contenido del formulario hijo al padre
Para ello se ha creado un archivo de nombre IForm.cs, el cual contendrá dicha definición.
1.public interface IForm
2.{
3.void ChangeTextBoxText(string text);
4.}
como podrá preciarse es muy simple solo define el contrato que permitirá luego desacoplar las interfaces
Tercer Paso – Implementación de la interfaz, llamada al formulario hijo
La interfaz anteriormente creada será implementada por el formulario del cual se quiere recibir la acción, en este caso será el form principal, o sea quien realiza la llamada.
01.public partial class Form1 : Form, IForm
02.{
03.public Form1()
04.{
05.InitializeComponent();
06.}
07. 
08.#region IForm Members
09. 
10.public void ChangeTextBoxText(string text)
11.{
12.TextBox1.Text = text;
13.}
14. 
15.#endregion
16. 
17.private void Button1_Click(object sender, EventArgs e)
18.{
19.Form2 form2 = new Form2();
20.form2.Show(this);
21.}
22.}
Hay que resaltar varias partes en esta sección de código:
- se notara en la primer línea como el formulario define la implementación de la interfaz
- la región establecida en el código, denota la implementación concreta de la misma, entre las líneas 8 al 15
También hay que remarcar como se realiza la apertura del formulario hijo, debe notarse el uso del parámetro en el método Show(), es allí donde se especifica quien será el owner, en este caso se hace uso de this ya que el formulario donde estamos en ese momento será quien realiza la apertura.
Cuarto Paso – Comunicación desde el formulario hijo
En esta ultima sección se visualizara como el formulario hijo envía datos al padre.
01.public partial class Form2 : Form
02.{
03.public Form2()
04.{
05.InitializeComponent();
06.}
07. 
08.private void Button1_Click(object sender, EventArgs e)
09.{
10.IForm formInterface = this.Owner as IForm;
11. 
12.if(formInterface != null)
13.formInterface.ChangeTextBoxText(TextBox1.Text);
14.}
15. 
16.}
En el código se puede apreciar claramente el uso de la propiedad Owner junto al this que en este caso representa al Form2.
Es interesante además remarcar la necesidad de castear la propiedad, en este caso particular se realiza mediante el uso de “as” Es muy útil hacer uso de este ya que ante una imposibilidad o error de casteo la aplicación no producirá un error, en este caso simplemente la variable obtendrá el valor null, es por ello que se hace uso del “if” para preguntar si pudo realizar la conversión de tipos.
Conclusión
Bueno después de analizar el ejemplo verán como por medio de un simple interfaz se logra desacoplar las dependencias entre formulario facilitando la comunicación entre ellos, la simple definición de un contrato asegura que el formulario hijo pueda interactuar ya no solo con un forma padre único, sino con cualquier otro formulario que lo utilice e implemente la interfaz.
[C#]
[VB.NET]

No hay comentarios:

Publicar un comentario