Está en la página 1de 5

TALLER DE EVENTOS Y DELEGADOS

Estructura del Proyecto Windows Forms:

formulario:
Código de Formulario:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using BusinessObject;

namespace EventosyDelegados
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void btnEvaluarPrimo_Click(object sender, EventArgs e)


{
NumerosPrimos objPrimos = new NumerosPrimos();
lblTitulos.Text = "El numero es Primo:";

escribirtxt(objPrimos.VerificarNumeroPrimo(Convert.ToInt32(txtNumeroaverificar.Text)
).ToString());
}

private void btnEvento_Click(object sender, EventArgs e)


{
//en este metodo ya no se invoca al delegado, sino al evento que a su
vez tiene el delegado asociado
txtPrimo.Text = "";
NumerosPrimos objPrimos = new NumerosPrimos();
lblTitulos.Text = "se encontraron los siguientes numeros usando
eventos:";
//consume el evento
objPrimos.eventoPrimoEncontrado += new
NumerosPrimos.PrimoEncontrado(escribeprimoencontrado);

escribirtxt(objPrimos.CuentaPrimosEvento(Convert.ToInt16(txtvrIncial.Text),
Convert.ToInt16(txtvrFinal.Text)).ToString());
}

private void btnEvaluarContador_Click(object sender, EventArgs e)


{
txtPrimo.Text = "";
NumerosPrimos objPrimos = new NumerosPrimos();
lblTitulos.Text = "Existen:";
escribirtxt(objPrimos.CuentaPrimos(Convert.ToInt16(txtvrIncial.Text),
Convert.ToInt16(txtvrFinal.Text)).ToString());
}

private void btnPrimosEncontrados_Click(object sender, EventArgs e)


{
//llama al metodo CuentaPrimosDelegado, al que se el envia el rango de
numeros en los que se deben
//encontrar los numero primos, y se le envia el metodo
escribeprimoencontrado para que lo imprima en
// la caja de texto
txtPrimo.Text = "";
NumerosPrimos objPrimos = new NumerosPrimos();
lblTitulos.Text = "se encontraron los siguientes numeros:";

escribirtxt(objPrimos.CuentaPrimosDelegado(Convert.ToInt16(txtvrIncial.Text),
Convert.ToInt16(txtvrFinal.Text), escribeprimoencontrado).ToString());
}

void escribirtxt(string valor)


{
//metodo que escribe en la caja de texto
//Enviroment hace un salto de linea en la caja de texto
txtPrimo.Text += valor.ToString() + Environment.NewLine;
}

//Metodo invocado en el delegado de la clase para ser utilizado


void escribeprimoencontrado(int primo)
{
//metodo que imprime numero a numero los primos encontrados en el rango
de numeros mediante el delegado
escribirtxt(primo.ToString());
}

}
}

Clase:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BusinessObject
{
public class NumerosPrimos
{
#region Delegados
//Un delegado es un puntero hacia un metodo
//El delegado debe tener la misma forma que los metodos a los que //va a
hacer referencia
//La firma del delegado es la “FORMA O ESTRUCTURA” del método que //va a
ejecutar la acción, en este caso el delegado es llamado //desde el metodo
CuentaPrimosDelegado, y tiene la misma firma //del metodo escribeprimoencontrado,
//escrito en el codigo del formulario, el tipo void, el nombre del delegado
//y los parámetros requeridos para ejecutar la acción
public delegate void PrimoEncontrado(int primo);
#endregion
#region Eventos
//un metodo es una accion que puede ejecutar una clase
//Un eventos es una accion que notifica a una clase, es una accion que
//puede avisar cuado se ejecuta una clase
//La funcion de un evento es invocar a un delegado
//Un evento debe ser de tipo publico,la palabra reservada event, el tipo
//de delegado (nombre del delegado que va a ejecutar ese evento)
//y finalmente el nombre del evento
//Para tener un evento, necesariamente debo tener un delegado
//Finalmente un evento se lanza de la misma forma en que se lanza un
//delegado metodo
public event PrimoEncontrado eventoPrimoEncontrado;
#endregion
#region Constructores
public NumerosPrimos()
{}
#endregion
#region Metodos
/// <summary>
/// Metodo que permite verificar si el numero es primo o no, los primos
///son los divisibles por
/// si mismos o por la unidad, si se puede dividir por otro ya no es
///primo.
/// </summary>
/// <param name="numero de tipo Entero"></param>
public bool VerificarNumeroPrimo(int numero)
{
//variable boleana prino en la que se asume q el numero es primo //hasta que
se demuestre lo contrario
bool primo = true;
for (int i = 2; i < numero; i++)
{
// si el residuo es 0 significa que lo pudo dividir y por lo tanto //ya no
es primo
var r = numero % i;
if (r == 0)
{
primo = false;
}
}
return primo;
}

/// <summary>
/// Genera un numero que cuenta primos
/// </summary>
/// <param name="vrinicial de tipo entero."></param>
/// <param name="vrfinal de tipo entero."></param>
/// <returns></returns>
public int CuentaPrimos(int vrinicial, int vrfinal)
{
int contador = 0;
for (int i = vrinicial; i <= vrfinal; i++)
{
if (VerificarNumeroPrimo(i))
{
contador++;
}
}
return contador;
}

/// <summary>
/// Genera un numero que cuenta primos invocado desde un delegado
/// </summary>
/// <param name="vrinicial de tipo entero."></param>
/// <param name="vrfinal de tipo entero."></param>
/// <param name="metodo de tipo Delegado PrimoEncontrado."></param>
/// <returns></returns>
/// es este caso, metodo es un parametro de tipo delegado creado en la
///region delegados llamado primoencontrado
public int CuentaPrimosDelegado(int vrinicial, int vrfinal, PrimoEncontrado
metodo)
{
int contador = 0;
for (int i = vrinicial; i <= vrfinal; i++)
{
if (VerificarNumeroPrimo(i))
{
contador++;
if (metodo != null)
{
metodo(i);
}
}
}
return contador;

/// <summary>
/// metodo que se ejecuta al ser solicitado por el evento
eventoPrimoEncontrado
/// </summary>
/// <param name="vrinicial"></param>
/// <param name="vrfinal"></param>
/// <returns></returns>
public int CuentaPrimosEvento(int vrinicial, int vrfinal)
{
int contador = 0;
for (int i = vrinicial; i <= vrfinal; i++)
{
if (VerificarNumeroPrimo(i))
{
contador++;
if (eventoPrimoEncontrado != null)
{
eventoPrimoEncontrado(i);
}
}
}
return contador;
}
#endregion
}
}

También podría gustarte