20 mar 2012

[WinForm] – Cuadros de Diálogos con BackGroundWorker y Delegados

 

Buen día a todos!! En esta oportunidad se mostrará el uso del BackGroundWorker y Delegados. Su uso es muy importante, debido a que informa al usuario que un proceso se está ejecutando, mostrando ya sea una barra de progreso o imagen gif, eso ya depende del usuario, para este caso colocaremos los 2. Esto informa al usuario que el sistema se está ejecutando y no que se “colgó”. Como sabemos tenemos que ser muy descriptivos con el usuario. Esto principalmente se implementa en carga de datos masiva.

Ahora pasemos a la parte buena, creamos un form como en la siguiente imagen :

Luego crearemos nuestro cuadro de dialogo, para ello crean un form similar a este :

Para la imagen gif pueden descargarla de aquí :Cargando1.gif

Ahora el código del Formulario que solicita los datos para llenar la grilla :

PDT: En la propiedad del ProgressBar colocar en Marquee mediante la vista Diseño.

   1: using System;
   2: using System.Collections.Generic;
   3: using System.ComponentModel;
   4: using System.Data;
   5: using System.Drawing;
   6: using System.Linq;
   7: using System.Text;
   8: using System.Windows.Forms;
   9:  
  10: namespace WindowsFormsApplication1
  11: {
  12:     public partial class Form3 : Form
  13:     {
  14:         public Form3()
  15:         {
  16:             InitializeComponent();
  17:         }
  18:  
  19:         //Creamos un dataset
  20:         DataSet ds = new DataSet();
  21:  
  22:         public void rssBlog()
  23:         { 
  24:             //Leeremos el ultimo rss del blog
  25:                 ds.ReadXml("http://feeds.feedburner.com/ProgramacinConEjemplosnet?format=xml", XmlReadMode.Auto);
  26:         }
  27:  
  28:         private void btnCargarDatos_Click(object sender, EventArgs e)
  29:         {
  30:             //Creamos la instancia del dialogo y pasamos el trabajo
  31:             frmDialog mensaje = new frmDialog(rssBlog);
  32:             //Si el trabajo termina OK entonces...
  33:             if (mensaje.ShowDialog(this) == DialogResult.OK)
  34:             {
  35:                 //Pasamos el resultado obtenido a la grilla
  36:                 dataGridView1.DataSource = ds.Tables[0];
  37:             }
  38:         }
  39:     }
  40: }

Luego el código del Formulario Diálogo que ejecuta el trabajo  :



   1: using System;
   2: using System.Collections.Generic;
   3: using System.ComponentModel;
   4: using System.Data;
   5: using System.Drawing;
   6: using System.Linq;
   7: using System.Text;
   8: using System.Windows.Forms;
   9:  
  10: namespace WindowsFormsApplication1
  11: {
  12:     public partial class frmDialog : Form
  13:     {
  14:  
  15:         //Declaracion del delegado(declara la firma y el nombre
  16:         //que se le asignará
  17:         public delegate void trabajo();
  18:  
  19:         //Delegado que usaremos para realizar finalmente el trabajo
  20:         //entregado por parametro al constructor
  21:         public trabajo Delegado { get; set; }
  22:  
  23:         
  24:         public frmDialog(trabajo delegado)
  25:         {
  26:             InitializeComponent();
  27:             //Recibimos el trabajo
  28:             this.Delegado = delegado;
  29:         }
  30:  
  31:         private BackgroundWorker nuevoTrabajo(trabajo delegado)
  32:         {
  33:             //Creo el trabajador
  34:             var trabajador = new BackgroundWorker();
  35:  
  36:             //Hacer el trabajo...
  37:             trabajador.DoWork += delegate {delegado(); };
  38:  
  39:             //Si el trabajo se completa entonces...
  40:             trabajador.RunWorkerCompleted += delegate {DialogResult = DialogResult.OK; Close(); };
  41:  
  42:             return trabajador;
  43:  
  44:         }
  45:  
  46:         private void Form2_Load(object sender, EventArgs e)
  47:         {
  48:             //Recibimos el trabajo y ejecutamos
  49:             nuevoTrabajo(Delegado).RunWorkerAsync();
  50:         }
  51:     }
  52: }

Cabe recordar que si quieren mandar un dato al formulario Dialogo no lo hagan mediante un control, sino mediante un tipo de dato(string,int32,Double,etc…) ya que sino les saldrá error debido a que se está ejecutando en otro hilo.


Ahora solo queda ejecutar el código y probar! Hasta una nueva oportunidad. Saludos!:arriba:.

19 mar 2012

[WinForm] – Sumar números dentro de una cadena

 

Buen día a todos!! En esta oportunidad se mostrará un ejemplo de cómo sumar números incrustados en una cadena. Para lograr esto se necesita recorrer la cadena mediante e ir analizando las posibles de validar la suma. Para ello utilizaremos 2 TextBox y 1 Boton :

Luego insertaremos el siguiente código explicado detalladamente para sumar los números dentro de una cadena :

   1: private void btnSumar_Click(object sender, EventArgs e)
   2:         {
   3:             if (txtOriginal.Text.Trim().Length == 0)
   4:             {
   5:                 MessageBox.Show("Ingrese cadena");
   6:             }
   7:             else
   8:             {
   9:                 //Declaro las variables numero y suma, donde numero sera el numero
  10:                 //encontrado durante el recorrido, si el que le sigue es otro numero
  11:                 //se concatenará(formando otro numero) sino se asumira que es unico
  12:                 // se sumará con el proximo numero que encuentre.
  13:                 string numero = "";
  14:                 double suma = 0.00;
  15:                 double nn = 0.00;
  16:                 //Toda la cadena ingresada lo almaceno en una variable
  17:                 string s = txtOriginal.Text.Trim();
  18:                 //La variable creada anteriormente lo convertimos en un arreglo de
  19:                 //caracteres almacenandola en el char "a".
  20:                 char[] a = s.ToCharArray();
  21:                 //Aqui recorremos el arreglo creado.
  22:                 for (int i = 0; i <= s.Length - 1; i++)
  23:                 {
  24:                     //Si el char es un numero
  25:                     if (char.IsNumber(a[i]))
  26:                     {
  27:                         //Si el char siguiente excede el limite de la longitud
  28:                         //del arreglo
  29:                         if (i + 1 > s.Length - 1)
  30:                         {
  31:                             //Concatenamos el numero
  32:                             numero = numero + a[i].ToString();
  33:                             nn = Convert.ToDouble(numero.ToString());
  34:                             //y sumamos
  35:                             suma = suma + nn;
  36:                             numero = "";
  37:                         }
  38:                         //sino excede el limite entonces...
  39:                         else
  40:                         {
  41:                             //si el char siguiente no es numerico
  42:                             if (!char.IsNumber(a[i + 1]))
  43:                             {
  44:                                 //y es un punto
  45:                                 if (a[i + 1].ToString().Equals("."))
  46:                                 {
  47:                                     //y el que le sigue al punto es un numerico
  48:                                     if (char.IsDigit(a[i + 2]))
  49:                                     {
  50:                                         //entonces concatenamos
  51:                                         numero = numero + a[i].ToString();
  52:                                     }
  53:                                     //o no es un punto entonces no juntamos nada
  54:                                     //------
  55:                                 }
  56:                                 //sino es un punto entonces...
  57:                                 else
  58:                                 {
  59:                                     //concatenamos el numero
  60:                                     numero = numero + a[i].ToString();
  61:                                     //lo convertimos a double para sumarlo
  62:                                     nn = Convert.ToDouble(numero.ToString());
  63:                                     //lo sumamos con el numero anterior
  64:                                     suma = suma + nn;
  65:                                     //seteamos para que no se junte todos los numeros
  66:                                     numero = "";
  67:                                 }
  68:                             }
  69:                             //si es numerico
  70:                             else
  71:                             {
  72:                                 //concatenamos el numero
  73:                                 numero = numero + a[i].ToString();
  74:                             }
  75:                         }
  76:                     }
  77:                     //Si el char no es numerico pero es un PUNTO(.)
  78:                     //entonces...
  79:                     if (a[i].ToString().Equals("."))
  80:                     {
  81:                         //verificamos si el anterior es un numero
  82:                         if (char.IsNumber(a[i - 1]))
  83:                         {
  84:                             //Ahora, tambien verificamos si el posterior es
  85:                             //un numero
  86:                             if (char.IsNumber(a[i + 1]))
  87:                             {
  88:                                 //concatenamos el numero(2+5=25) o (23.+3=23.3)
  89:                                 numero = numero + a[i].ToString();
  90:                             }
  91:                         }
  92:                     }
  93:                 }
  94:                 //Una vez terminado el recorrido mostramos
  95:                 //la suma total pero antes la convertimos 
  96:                 //en cadena para mostrarlo en un label
  97:                 txtResultado.Text = suma.ToString(); ;
  98:             }
  99:         }


Ejecutamos e insertamos la siguiente cadena por ejemplo en txtOriginal :


“esto es un tex100to de prueba y .74 además 13.82 finaliza con el simbolo#”


Pulsamos Sumar números y obtendremos el siguiente resultado :



Espero les haya sido de mucha utilidad. Hasta una nueva oportunidad. Saludos!!.