martes, 15 de mayo de 2018


CUADRE DE CAJA TOUCH EN C#.

Ver vídeo de demostración

Que tal, en los actuales momentos la tecnología informática es una de las principales herramientas más utilizada en las labores cotidianas en la vida de las personas, vemos con asombro como cada ves surgen nuevos equipos de computadoras con nuevas características; en eso, podemos decir a lo que se refiere lo TOUCH, que esta posibilidad de trabajar con la pantalla táctil, agilita de manera significativa algunos procesos, que con la utilización del mouse y teclado convencional se pierde tiempo importante en el desarrollo de alguna tarea.
 Es por tal motivo, que he realizado un ejemplo donde se utilice las pantallas táctiles, este pequeño proyecto consiste en realizar un formulario sobre un cuadre de caja. En el que se utilice controles comunes como: Label, TextBox, dataGridViewn y Button, este último se le hará una modificación para cumplir con este objetivo.
El lenguaje de programación utilizado en este proyecto es C#, y como IDE se utilizó SharpDevelop, este IDE es de libre uso y es muy bueno a la hora de realizar estos ejemplos, las instrucciones utilizadas aquí son las mismas que en visual studio.
¿Por qué utilizo este IDE?. Por razones de capacidad de almacenamiento, este programa en muy liviano y se puede instalar en equipos de pocos recursos de almacenamiento.


El programa de ejemplo al final de este capítulo quedara de la siguiente manera.



MANOS A LA OBRA.
1.      Para empezar a realizar esta pequeña aplicación cree un proyecto Windows Form, el nombre les dejo a su elección.
2.      Una vez creado el proyecto, agregamos una clase que tendrá como nombre butonSinFoco.cs, y en ella copiamos el siguiente código.

using System;
using System.Windows.Forms;

namespace ppp
{
    /// <summary>
    /// Descrpción: esta clase vincula un objeto Button,
    /// para modificar su base para desactivar el foco,
    /// que es indispenble para este ejemplo, de esta
    /// manera el grid no pierde el foco
    /// </summary>
    public partial class butonSinFoco : Button
    {
        public butonSinFoco()
        {
            base.SetStyle(ControlStyles.Selectable,false);
            base.UpdateStyles();
        }
    }
}
Es indispensable que se haga referencia a la librería System.Windows.Form, porque se va a manipular el objeto Button, para que no acepte el foco. Esta medida se la realiza porque se quiere que el dataGridView no pierda el foco, mejor dicho, no se quiere que este control deje de ser el objeto activo.

Una vez compilado el proyecto, este objeto se mostrará en la caja de herramientas de la siguiente manera.

3.      Ahora, es necesario agregar otra clase con el nombre Caja.cs, esta clase tendrá la particularidad de representar una tabla con sus respectivos campos. A continuación, se muestra el código que llevara esta clase.

using System;

namespace ppp
{
    /// <summary>
    /// Descripción: Emulando los campo de una tabla
    /// </summary>
    public class Caja
    {
        public string billete {get; set;}
        public decimal denominacion {get; set;}
        public decimal valor {get; set;}
        public decimal total {get; set;}
     
    }
}
Hasta ahora, el proyecto debe lucir asi:

4.      Empezamos a diseñar el formulario y su aspecto debe quedar así.



5.      En este formulario vamos a utilizar los siguientes namespace.
 //Espacio de nombres a utlizar
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Linq;

6.       También vamos a crear una variable tipo List que contendrá los valores a trabajar en este ejemplo. Esta variable tiene el nombre de lsCaja.

    //Variable que contendra la lista de monedas
    List<Caja> lsCaja {get; set;}
    
7.      Seguidamente en el constructor de nuestro formulario, configuramos el dataGridView de la siguiente manera.

public MainForm()
{

    InitializeComponent();     
 
    lsCaja = new List<Caja>();
 
    lsCaja.Add(new Caja() {billete = "1 CENTAVO", denominacion = (0.01m), valor = new decimal(0)});
    lsCaja.Add(new Caja() {billete = "5 CENTAVOS",denominacion =(0.05m), valor = new decimal(0)});     
    lsCaja.Add(new Caja() {billete = "10 CENTAVOS",denominacion = (0.10m), valor = new decimal(0)});
    lsCaja.Add(new Caja() {billete = "25 CENTAVOS",denominacion = (0.25m), valor = new decimal(0)}); 
    lsCaja.Add(new Caja() {billete = "50 CENTAVOS",denominacion = (0.50m), valor = new decimal(0)}); 
    lsCaja.Add(new Caja() {billete = "1 DOLAR",denominacion = (1), valor = new decimal(0)});
    lsCaja.Add(new Caja() {billete = "5 DOLARES",denominacion = (5), valor = new decimal(0)});
    lsCaja.Add(new Caja() {billete = "10 DOLARES",denominacion = (10), valor = new decimal(0)});
    lsCaja.Add(new Caja() {billete = "20 DOLARES",denominacion = (20), valor = new decimal(0)});
    lsCaja.Add(new Caja() {billete = "50 DOLARES",denominacion = (50), valor = new decimal(0)});
    lsCaja.Add(new Caja() {billete = "100 DOLARES",denominacion = (100), valor = new decimal(0)});
 
    dataGridView1.DataSource = lsCaja;
 
    dataGridView1.Columns[0].ReadOnly=true;
    dataGridView1.Columns[1].ReadOnly=true;
    dataGridView1.Columns[3].ReadOnly=true;

}
8.      Ahora, vamos a entrar a codificar los objetos de nuestro formulario, los botones del cero al nueve llevan el mismo código, estas líneas tienen la particularidad de deducir que celda esta activa.
Se debe asignar el mismo evento click a cada control. El código es el siguiente:
 
        void Button1Click(object sender, EventArgs e)
        {
            Button btn = sender as Button;
            TextBox txtActivo = ActiveControl as TextBox;
         
            if (txtActivo != null ) {
                if (txtActivo.Text =="0")
                    txtActivo.Text="";
                txtActivo.Text+=btn.Text;
         
            }
9.      Para el botón Borrar, el código es el que se muestra a continuación.
    void ButonSinFoco11Click(object sender, EventArgs e)
        {
            Button btn = sender as Button;
            TextBox txtActivo = ActiveControl as TextBox;
         
            if (txtActivo != null ) {             
                txtActivo.Text="0";
            }
        }

10.  Y para el botón Enter, usaremos el siguiente.
void ButonSinFoco10Click(object sender, EventArgs e)
        {
            SendKeys.Send("{ENTER}");
        }
11.   El componente dataGridView, tendrá configurado los siguientes eventos.
Esto es para que cuando se haga clic en una celda esta se edite.
    void DataGridView1CellClick(object sender, DataGridViewCellEventArgs e)
        {
            dataGridView1.BeginEdit(true);
        }
Aquí, cuando la celda finalice su edición, realice el calculo del total y general.
void DataGridView1CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
         
            Caja cj = lsCaja[e.RowIndex];
            cj.total = cj.valor * cj.denominacion ;         
            dataGridView1.Refresh();
            CalcularTotal();
        }


12.  Para calcular el total ingresado utilizaremos el siguiente método.
void CalcularTotal()
        {
            txtTotal.Text = lsCaja.Sum(t => t.total ).ToString();
        }
CONCLUSIÓN
Espero que este ejemplo sea de gran utilidad para el desarrollo de futuras aplicaciones informáticas.

No olvidarse de las validaciones de datos, este por ser solo un ejemplo donde expongo una idea no utiliza validaciones.

Recordar que a este código lo pueden utilizar y mejorar a su conveniencia y sobre todo no se olviden de compartir sus cambios.

Hasta pronto...

Ver vídeo de demostración

CUADRE DE CAJA TOUCH EN C#. Ver vídeo de demostración Que tal, en los actuales momentos la tecnología informática es una de las princ...