9.06.2009

Eventos, Delegados en C#

Eventos, Delegados en C# paso a paso
Ante las constantes preguntas en foros y las que me hacen los visitantes; decidi explicar paso a paso como crear un evento y aplicarlo en algo muy comun, teniendo dos formularios abiertos pasar datos o hacer que la acción en el Secundario ( Form2 ) implique simultaneamente en el Primario (Form1).
Haber, la parte teórica creo que ya es conocida por todos y que ni leendo 3 veces te queda la idea clara bien, vamos al meollo del asunto.

CASO:
Se tienen dos formularios, Form1 - Form2 ; ambos obviamente en el ambiente WinForm CSharp, se quiere invocar al formulario 2 (Form2) desde el Form1 con un Boton, luego desde un boton del Form2 cambiaremos el Titulo del Form1.

SOLUCION : (paso a paso) te va a funcionar :-)

1.- Iniciamos Visual Studio, click File >> New >> Project >> Visual C# (Izquierda) >> Windows Forms Applications.
Name : w01
Location: C:\practica (una carpeta cualquiera)
Click en OK!

2.- Por Defecto tenemos un Form1, necesitamos otro formulario (Form2); Menu Project >> Add Windows Form >> Click Botón Add.
3.- Diseño del Formulario 1 (Form1)


Botón:
Name : btnMostrar
text : Form2


4.- Diseño del Formulario 2 (Form2)



Controles
Label1 :
Text: Ingrese Titulo para Form1
TexBox1:
Name: txtTitulo
Button:
Name: btnEnviar
Text: Enviar
5.- En el Form2 creamos el Evento y Delegado.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace w01
{
public partial class Form2 : Form
{
// Delegado
public delegate void DelegadoTitulo(string mensaje);
//Evento
public event DelegadoTitulo MiEvento;
public Form2()
{
InitializeComponent();
}
private void btnEnviar_Click(object sender, EventArgs e)
{
// Al evento Click del Boton invocamos el Evento y pasamos el TEXTO
this.MiEvento(txtTitulo.Text);
}
}
}

6.- Ahora en el Form1 recibimos el parámetro y hacemos que se ejecute nuestro método ()
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace w01
{
public partial class Form1 : Form
{
// Instanciamos un objeto de FORM2
Form2 formulario = new Form2();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//Invocamos al Evento
//PonerTitulo es un método
formulario.MiEvento += new Form2.DelegadoTitulo(PonerTitulo);
}
//Metodo de Form1 que pondrá el titulo al Form
void PonerTitulo(string mensaje)
{
this.Text = mensaje;
}
private void btnMostrar_Click(object sender, EventArgs e)
{
// Mostrar formulario (objeto de Form2)
formulario.Show();
}
}
}

7.- Ejecutando

Espero que les ayude ...