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();
}
}
}
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;}
}
}
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;
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";
}
}
{
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}");
}
{
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);
}
{
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();
}
{
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();
}
{
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