2. 1.Creación de Nuestro Formulario
Para este ejemplo, crearemos un formulario que nos permita almacenar en un hashtable
objetos del tipo “Personas”.
Bueno, sin más detalles, vamos a crear un formulario con los siguientes elementos:
Notas:
- El dígito verificador de RUT lo hice con ComboBox, no se puede modificar y dentro
de las opciones del ComboBox, están los números <1-9> y el carácter ‘K’.
- F. de Nac es un MaskedTextBox, en Propiedades>Mask, seleccionen el de Fecha para
que quede como el del ejemplo.
- Para listar las personas, utilicé un RichTextBox y en propiedades, cambié a “True” la
opción ReadOnly, que sirve para que sólo podamos leer y no escribir en él.
2.Creando Nuestra clase clPersonas.cs
También esta será uno de los pasos más simples: Crear una nueva clase clPersonas, la
cual contendrá las siguientes variables:
- int rut, char dv, string nombre, string dirección, int edad y DateTime fNac.
3. Dentro de ésta clase, agregaremos un método llamado “datosToString()”, el cual nos devolverá
todos los atributos de la clase en una cadena de texto, la cual utilizaremos en nuestro
RichTextBox para listar a todos los objetos dentro de nuestro HashTable:
Nota:
- El salto de línea luego de this.Nombre.ToString() lo agregué sólo para poder hacer la
captura de pantalla de todo el contenido, ya que de otra manera, no cabría en la
imagen.
- Como pueden darse cuenta, TODAS las variables las convertí en String.
3.Creación de nuestra clase que
manejará el HashTable con sus métodos
Ahora que tenemos lista nuestra clase clPersonas, procederemos a crear la clase clHashTable, la
cual contendrá los métodos que utilizaremos para agregar/eliminar/modificar/buscar los
objetos clPersonas de nuestro hashtable.
4. Nota: Si se fijan, en mi ejemplo, las clases clHashTables y clPersona se encuentran en una
carpeta dentro de nuestra solución, por ende en el formulario debemos agregar la referencia
“using {Nombre de la solución}:{Carpeta};” en este caso, mi solución es “HashTablesTut” y mi
carpeta es “Clases”, por ende en este ejemplo, la referencia quedaría de la siguiente forma:
Continuando con nuestra clase clHasTables.cs, vamos a agregar la referencia:
“using System.Collections”, que nos permite trabajar con la clase Hashtable, en inmediataente
creamos una variable pública, del tipo HashTable:
5. Luego, el método “agregar” el cual tendrá por parámetros un objeto de tipo “clPersonas” que
será el objeto que agregará a nuestro hashtable recién creado:
Ahora seguimos con el método “modificar”, al cual le pasaremos por parámetros la variable
primaria “pRut” (que será el rut que ingresamos en nuestro formulario) y un objeto clPersona p1,
que contendrá las variables a reemplazar del objeto dentro del hashtable. Éste método realiza
una búsqueda dentro del hashtable para encontrar (por RUT) el objeto que deseamos modificar,
si lo encuentra, reemplaza las variables “Nombre, Dirección, Edad y Fecha de Nacimiento” del
objeto encontrado por los del objeto que le pasamos por parámetro:
6. Ahora crearemos el método eliminar, y le pasaremos por parámetro el RUT del objeto que
deseamos eliminar, de esta manera, nuestro método buscará dentro del hashtable algún objeto
que contenga ese rut, eliminará y devolverá “true”, de lo contrario; nos devolverá “false”:
Por último, crearemos un método de tipo “clPersona” y le pasaremos por parámetro una
variable primaria “pRut”, la cual, será nuestra guía para buscar dentro del hashtable algún objeto
que contenga esa variable primaria. Si no la encuentra, devolverá un objeto de tipo clPersona
vacío (null), en caso contrario, creamos el objeto de tipo clPersona “p1” y lo inicializamos como
el objeto encontrado, luego nos retorna el objeto “p1” recién inicializado:
7. 4.Asignando funciones a nuestro
Formulario
Ya que terminamos nuestras clases clPersona.cs y clHashtable.cs, y nuestra asignatura se llama
“Programación Orientada a Objetos” y es precisamente lo que vamos a hacer: Agregaremos las
funciones a los botones de nuestro formulario.
Asumiendo que realizaron bien la “Nota” del paso número 3 (más arriba), vamos a realizar
ANTES de jugar con nuestras clases, la siguiente validación:
“Que ningún campo del formulario quede vacío antes de Agregar o Modificar un objeto”.
Para esto, crearemos un método bool validarCampos(), el cual nos devolverá “true” si todos los
campos contienen datos, o “false” si falta completar alguno. Nos será muy útil en varios casos
que veremos más adelante:
Ahora crearemos un método limpiar() que limpiará todos los campos del formulario, ya que
también lo utilizaremos en varias funciones para que, luego de ejecutarlas, limpie el contenido
de los campos del formulario:
Ya que tenemos estos 2 métodos fundamentales, continuamos con la creación de las funciones
de todos nuestros botones…
8. Botón “Insertar”:
Validaremos que estén todos los campos, si están completos, creamos un objeto clPersona p1, y
llamaremos (dentro de un if/else) al método agregar, al cual le pasaremos pro parámetro
nuestro objeto clPersona p1, si este método nos devuelve “true”, significa que agregó nuestro
objeto p1 al hashtable, y si no, nos arrojará un mensaje que dice que nuestro rut ya existe en el
hashtable. Si no están todos los campos completos en el formulario, nos arrojará un mensaje de
error.
Boton Modificar:
Para este método, lo que haremos será comprobar que los campos del formulario contengan
datos, si es así, creamos un objeto clPersona p1 con esos datos. Luego en un if/else llamamos al
método “modificar” de nuestra clase HashTable, si éste nos devuelve “true” significa que el
objeto dentro del hashtable ha sido modificado y limpia los datos, si devuelve “false”, significa
que el rut ingresado en nuestro formulario no existe en ningún objeto del hashtable, por ende,
mostramos un mensaje de error. Si no están completos los datos del formulario, mostramos
mensaje de error.
9. Botón Eliminar:
En este botón vamos a validar que tengamos nuestro campo RUT con datos, si es así;
validaremos que al llamar al método eliminar de nuestra clase hashtable, si éste nos devuelve
“true”, mostramos un mensaje que diga que el objeto ha sido eliminado, si no, significa que el
rut no existe y por ende, mostramos un mensaje de error. Si nuestro campo txRut no tiene
datos, mostramos un mensaje de error para que el usuario complete el campo:
10. Botón “Buscar”:
Creamos una variable local int pRut. Si el campo txRut contiene datos, asignamos su valor a la
variable local pRut. Luego creamos un objeto clPersona p1, al cual lo inicializaremos según el
objeto que nos devuelve el método “buscar” de nuestra clase hashtables; es decir: Si encuentra
el rut, nos devolverá el objeto que lo contiene y completaremos nuestros campos del formulario
con las variables de este objeto devuvelto. Si no, nos devolverá un objeto vacío “null” y nos
mostrará un mensaje de error. En caso de que el campo txRut no contenga datos, nos mostrará
un mensaje de error y centraremos el focus() en este campo para ser completado antes de
seleccionar una función del formulario:
11. Botón: “Listar”
En este caso, utilizaremos el richTextBox de la derecha de nuestro formulario para mostrar los
datos de todos los objetos dentro de nuestro hashtab, para ello utilizaremos un “forEach”.
La sintaxis del foreach es la siguiente:
Foreach ( “tipo de variable principal” “nombre de la variable” in “Nombre de nuestro
hashtable”.Keys )
{
// Código que ejecutará para cada objeto.
}
En mi caso, sería:
Foreach(int Rut in myHash.ht.Keys)
{
//Código….
}
Es decir, quedaría más o menos así:
Bueno, para terminar, nos faltaría el botón Limpiar Datos de nuestro richTextBox, el cual es el
más simple de todos, ya que sólo limpia el contenido de 1 campo:
12. Con esto, doy por fin al tutorial de manejo de HashTables, contiene la materia vista en clases, y
por ende, debiera ser la última materia que entraría en el exámen.
5.Comentarios:
Junto con este tutorial, adjuntaré el proyecto generado (.exe), no así el proyecto
completo con su respectivo source, ya que la finalidad de este tutorial es que practiquen
en sus hogares sin realizar copy/paste, ya que sería demasiado fácil y por ende, no
aprenderán nada y mi trabajo sería tan útil para ustedes como usar lentes de sol en un
túnel oscuro.
Espero que este tutorial les guíe y les pueda ayudar a entender a quienes aún tienen
dificultades.
Saludos y muchas gracias por darse el tiempo de leer.
Atte.
P. Alejandro Bustos.
Dudas y Consultas: http://www.facebook.com/alex.rasen
- Proyecto realizado con Visual Studio 2012.
- Agradecimientos al profesor Carlos Ojeda (harrys) por la ayuda prestada en la
elaboración del presente tutorial.