Ir al contenido principal

EVENTOS Y DELEGADOS EN C#

Una de las bondades de .NET y en particular en C# es el uso de delegados que no es mas que un apuntador hacia una funcion o método  como en C++ usábamos apuntadores pero tenían un problema al menos para mi en el desarrollo de sistemas era que en ocasiones apuntaba a un valor nulo, siempre y cuando la función no se había inicializado o bien podrían contener valores (basura).

Esto lo resuelve C# usando delegados y su uso es bastante útil como lo vamos a ver a continuación:

supongamos que queremos hacer dos cosas al mismo tiempo dentro de nuestro sistema ya se lo que esta pensando "por que no usar métodos asíncronos " pues bien si nosotros abusamos de esta regla de desarrollo nuestro sistema se hará muy lento y la solución seria DELEGADOS, que en realidad la demostración sera muy simple; añadimos un proyecto de windows forms, y a nuestro form le agregamos un Boton y dos ListBox; en nuestra clase Form ponemos estos dos métodos:


 private void lista1()
        {
            for (int i = 0; i <= 500; i++)
            {

                listBox1.Items.Add("Agregar Dato");
            }
        }
        private void lista2()
        {
            for (int i = 0; i <= 500; i++)
            {

                listBox2.Items.Add(listBox1.Items[i].ToString());
            }
        }

y declaramos un delegado así:

private delegate void generar();

Dentro de nuestro evento Click del Boton generamos tres delegados, uno para cada método y el otro sera una combinación de ambos:


private void button1_Click(object sender, EventArgs e)
        {
            generar l1 = lista1;
            generar l2 = lista2;
            generar combinado = l1+ l2;
            combinado();
        }
si ejecutamos el código veremos que ambos métodos se ejecutan al mismo tiempo y esto se debe a que combinamos los dos delegados en uno solo, pero también podemos hacer lo mismo con un evento que en perspectiva es prácticamente lo mismo ya que un evento es un delegado que contiene métodos pero vamos a ver como  quedaría :


private void lista(object sender, EventArgs e )
        {
            for (int i = 0; i <= 500; i++)
            {

                listBox2.Items.Add(listBox1.Items[i].ToString());
            }
       
        }
este seria mi evento que como podemos ver hace lo mismo que el metodo lista2, ahora lo que nos queda es suscribirnos a este evento que seria dentro de nuestro constructor del nuestro form


 public Form1()
        {
            InitializeComponent();
            button1.Click+=lista;
        }

ahora haremos un pequeño cambio en nuestro evento Click del boton:


 private void button1_Click(object sender, EventArgs e)
        {
            generar ejecutar = anexar;
           /* generar ejecutar2 = lista2;
            generar combinado = ejecutar + ejecutar2;*/
            ejecutar();
        }
simple no es verdad?

Comentarios

Entradas populares de este blog

Conectar JAVA a SQLServer

Como ya lo comente en mi blog anterior no soy un fiel seguidor de JAVA pero en ocaciones debemos usar este lenguaje para algun proyecto. para conectarnos a SQLServer con Java es bastante elemental, solo basta con descargar la liberia que puedes descargar  aqui , una vez descargado creamos una nueva aplicacion de java. lo primero que debemos hacer es importar la libreria, le damos clic con el boton derecho sobre librerias com lo muestro acontinuacion: elegimos el  archivo : una vez hecho esto a programar. package base.de.datos.sqlserver; import java.sql.*; public class BaseDeDatosSqlserver {     public static void main(String[] args) {         Connection conexion=null;             try         {             Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");             String url = "jdbc...

LLENAR UN JTABLE,LISTBOX Y COMBOBOX CON JAVA USANDO NETBEANS

he estado ocupado en unos proyectos, pero estoy de nuevo para compartir lo poco que se de desarrollo de sistemas, el dia de hoy comparto como llenar un objeto JTable en Java con datos de una base de datos MySQL. antes de continuar supongo que ya tienen conocimientos de programacion en especial en Java. Yo usare Netbeans  pero ustedes pueden usar cualquier IDE. para este ejemplo trabajaremos con 3 archivos, Clase,Interfaz y JFrame Form. Y una tabla llamada productos con los campos id,descripcion y precio, algo simple primero vamos a crear nuestra Interfaz que le llamaremos Idb (le pueden como quieran). y vamos a inicializar nuetros metodos. import javax.swing.DefaultListModel; import javax.swing.JComboBox; import javax.swing.table.DefaultTableModel; /**  *  * @nadie  */ public interface Idb {     DefaultTableModel Grid_DataSource(String sql); //LLENAR JTABLE     DefaultListModel ListBox_DataSource(String sql,String Campo); //LLE...

EDITAR UN DOCUMENTO WORD USANDO MARCADORES CON C#

en ocaciones debemos usar documentos creados en Word como platillas, es decir que tienen un formato especifico y bastante eleborado  y por obvias razones si deseamos crear dicho docuemento en nuestra aplicacion eso nos llevaria  un valioso tiempo,una de las formas muy simples de editar un documento es agregarle los famosos BookMarks (marcadores) y estos editarlos. manos a la obra...primero creamos un documento muy simple para mostrar este ejemplo, en la hoja en blanco insertaremos un marcador el cual le llamaremos "nombre" sin comillas. y lo guardaremos en el disco local C: con el nombre de marcador.doc o marcador.docx dependiendo de su version de Word. creamos una nueva aplicacions WindowsForms  y en Referencias agregamos Microsoft.Office.Interop.Word. en la cabezera pondremos : using Word = Microsoft.Office.Interop.Word; despues declaramos un elemento privado: private Word.Application apWord; y le añadimos un nuevo boton y en el evento de clic escribimo...