You are on page 1of 10

Unicomfacauca Electiva III Ing.

Lisandro Acosta Taller Prctico, 08-03-2013

Manejo de ventanas, controles y clases


Realizar en grupos mximo de dos personas el siguiente taller. Tener en cuenta las indicaciones realizadas a lo largo del mismo. Al finalizar el taller, deberamos tener un programa escrito en C# con la siguiente apariencia.

Adjunto a este documento se entrega un archivo ejecutable de la aplicacin en donde pueden verificar el funcionamiento de cada una de las opciones. Adems se adjuntan dos archivos correspondientes a las clases utilizadas. Pasos a seguir. 1. Crear un proyecto nuevo en visual c# denominado appPaciente1 y establecer el formulario principal como contenedor de formas, es decir modificar la propiedad IsMdiContainer a true. Adems cambiar la propiedad WindowState en Maximized.

2. Adicionar al formulario principal un control tipo ToolStrip para dar al formulario un manejo de una barra de opciones. El ToolStrip tiene tres botones normales y un cuarto boton tipo dropdownbutton. Este ltimo contiene una opcin que presenta el texto Buscar por nombre.

A cada uno de los botones se les puede cambiar las propiedades correspondientes para que se cargue una imagen y para que se despliegue al mismo tiempo el texto y la imagen. La idea es que se vea de la siguiente manera.

Los iconos utilizados en el ejemplo se pueden descargar de www.famfamfam.com 3. Por cada opcin de la barra de tareas se debe crear un formulario independiente, por ejemplo para la opcin Adicionar se debe crear un nuevo formulario que puede tener el nombre frmAdicionarPaciente y dentro de el se deben ubicar los controles requeridos para permitir al usuario realizar la tarea indicada.

La grfica anterior ilustra cmo se est han creado formularios por cada opcin de la barra de tareas. Para el caso de la creacin de nuevos pacientes se ha creado el formulario sealado y dentro de el se han adicionado controles que permiten manipular los campos creados en las clases, es decir la cedula, el nombre, los apellidos. Las clases que se envan adjuntas presentan una relacin de herencia, donde la clase Paciente hereda de la clase Persona, es decir que desde el Paciente puedo hacer uso de todas propiedades y mtodos tipo public y protected de la clase Persona. La clase persona como se observa en el archivo contiene los campos propios como son cedula, nombre, apellidos, sexo y edad, y por cada campo se creado su correspondiente propiedad. La clase Paciente a su vez hereda de la clase Persona. La herencia en C# se hace con la siguiente instruccin:

class Paciente:Persona

De esta forma, los dos puntos (:) indican que Paciente va a heredar los atributos, propiedades o mtodos que la clase Persona tenga definido como puclic o protected. As mismo la clase Paciente tiene un atributo propio denominado FechaCita con su correspondiente propiedad. Nota: Como se indica en la grfica, en el formulario para adicionar pacientes hacen falta controles para poder manipular los dems campos, en este caso el sexo, la edad y la fecha de la cita. Debe adicionar los controles que hacen falta con su correspondiente manejo! Podra utilizar para el caso de el sexo un Combobox, para la edad un MaskedTextbox y para la fecha de cita un control tipo DateTimePicker!

La elaboracin del formulario anterior incluye un control de tipo MaskedTextBox, muy utilizado para el caso de requerir leer solo datos numricos. En el formulario se utilizo para manejar el campo Cedula pues este campo es exclusivamente numrico, y al manejarlo con un MaskedTextBox el usuario no podr escribir ningn carcter diferente a un numero.

El funcionamiento de un MaskedTextBox es muy similar al manejo de un Textbox. La diferencia radica en que al maskedTextBox se le debe especificar una mascara (Mask) que sirve para especificar el numero de dgitos que se quieren digitar o el formato particular de estos. En el caso del formulario para registrar pacientes, la mascara se establece en 999999999999 lo cual indica que se van a permitir ingresar solo 12 dgitos numricos como mximo en el campo Cedula.

En el botn Adicionar permite crear un nuevo paciente y adicionarlo a la aplicacin. El cdigo para esto se presenta a continuacin (no olvide dar dobleclick sobre el botn para que se cree el evento):
private void btnAdicionar_Click(object sender, EventArgs e) { Paciente objNuevoPaciente = new Paciente(); objNuevoPaciente.Cedula = long.Parse(txtCedula.Text); objNuevoPaciente.Nombre = txtNombres.Text; objNuevoPaciente.Apellidos = txtApellidos.Text; // objNuevoPaciente.Sexo = ??? // objNuevoPaciente.Edad = ??? // objNuevoPaciente.FechaCita = ??? mListaPacientes.Add(objNuevoPaciente); MessageBox.Show("Registro adicionado correctamente","Informacin", essageBoxButtons.OK, MessageBoxIcon.Information); InicializarControles(); }

En donde se crea una instancia de la clase Paciente y a esta se le adicionan los valores digitados por el usuario en la interfase. Una vez adicionados el objeto se adiciona a una lista de pacientes (mListaPacientes de tipo ArrayList), se presenta un mensaje de informacin y se limpian los controles de la interfase con el mtodo InicializarControles().
//Este mtodo limpia los controles de la interfase private void InicializarControles() { txtCedula.Text = ""; txtNombres.Text = ""; txtApellidos.Text = ""; }

Para cerrar una ventana, en el cdigo del botn Cerrar se utiliza la siguiente instruccin:
this.Close();

El cdigo interno del formulario frmAdicionarPaciente debe lucir ms o menos as:


using using using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Text; System.Windows.Forms; System.Collections;

namespace appPaciente1 { public partial class frmAdicionarPaciente : Form { private ArrayList mListaPacientes = new ArrayList(); public ArrayList ListaPacientes { get{return mListaPacientes;} set{mListaPacientes = value;} } public frmAdicionarPaciente() { InitializeComponent(); } private void btnAdicionar_Click(object sender, EventArgs e) { Paciente objNuevoPaciente = new Paciente(); objNuevoPaciente.Cedula = long.Parse(txtCedula.Text); objNuevoPaciente.Nombre = txtNombres.Text; objNuevoPaciente.Apellidos = txtApellidos.Text; // objNuevoPaciente.Sexo = ??? // objNuevoPaciente.Edad = ??? // objNuevoPaciente.FechaCita = ??? mListaPacientes.Add(objNuevoPaciente); MessageBox.Show("Registro adicionado correctamente","Informacin", MessageBoxButtons.OK, MessageBoxIcon.Information); InicializarControles(); } private void btnCerrar_Click(object sender, EventArgs e) { this.Close(); } private void InicializarControles() { txtCedula.Text = ""; txtNombres.Text = ""; txtApellidos.Text = ""; } } }

Tener en cuenta que en el cdigo anterior hace falta incluir el manejo de los dems campos como el sexo, la edad y la fecha de la cita.

4. Una vez creado el formulario de una opcin especifica de la barra de tareas, es necesario cargarlo al dar clic sobre el botn correspondiente en la barra de tareas. Por ejemplo, si ya se creo el formulario para adicionar pacientes, ahora es necesario cargar ese formulario cuando el usuario de clic en el botn Adicionar de la barra de opciones.

Para lograr esto se debe hacer lo siguiente: a. Ir a la vista de cdigo de la forma principal es decir la forma contenedora y crear un objeto tipo ArrayList que servir como repositorio de los pacientes que se van a ir creando o modificando en toda la aplicacin
private ArrayList mListaPacientes = new ArrayList();

b. Volver a la vista de diseo del formulario principal y dar dobleclick sobre el botn Adicionar de la barra de opciones. Una vez creado el evento podemos crear una instancia del formulario que realiza la tarea de adicin (frmAdicionarPaciente) y cargarlo, as:
private void btnMenuAdicionar_Click(object sender, EventArgs e) { frmAdicionarPaciente objFrmNuevoPaciente = new frmAdicionarPaciente(); objFrmNuevoPaciente.MdiParent = this; objFrmNuevoPaciente.ListaPacientes = mListaPacientes; objFrmNuevoPaciente.Show(); }

- La primera lnea de cdigo de este botn, crea la instancia correspondiente al formulario que sirve para adicionar pacientes. - La siguiente lnea le indica al formulario que se va a cargar, que quien es el formulario contenedor. En este caso el formulario contenedor o padre es el formulario principal en el cual nos encontramos en ese momento (this). - La siguiente lnea le asigna al formulario que se va a cargar la lista de pacientes para que esta pueda adicionar pacientes. De esta forma en el formulario objFrmNuevoPaciente de tipo frmAdicionarPaciente se podrn adicionar Pacientes a la Lista.

- La ltima lnea de cdigo le indica al formulario que se presente o que se muestre. 5. El cdigo anterior debe repetirse para cada uno de los botones de la barra de opciones, teniendo en cuenta que se deben crear los formularios correspondientes en cada caso. Una vez creados los dems formularios (formulario para modificar, formulario para eliminar y formulario para consultar por nombre), la carga de los mismos desde el formulario principal lucira ms o menos as:
using using using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Text; System.Windows.Forms; System.Collections;

namespace appPaciente1 { public partial class frmPrincipal : Form { private ArrayList mListaPacientes = new ArrayList(); public frmPrincipal() { InitializeComponent(); } private void btnMenuAdicionar_Click(object sender, EventArgs e) { frmAdicionarPaciente objFrmNuevoPaciente = new frmAdicionarPaciente(); objFrmNuevoPaciente.MdiParent = this; objFrmNuevoPaciente.ListaPacientes = mListaPacientes; objFrmNuevoPaciente.Show(); } private void btnMenuEliminar_Click(object sender, EventArgs e) { frmEliminarPaciente ObjFrmEliminarPaciente = new frmEliminarPaciente(); ObjFrmEliminarPaciente.MdiParent = this; ObjFrmEliminarPaciente.ListaPacientes = mListaPacientes; ObjFrmEliminarPaciente.Show(); } private void btnMenuModificar_Click(object sender, EventArgs e) { frmModificarPaciente ObjFrmModificarPaciente = new frmModificarPaciente(); ObjFrmModificarPaciente.MdiParent = this; ObjFrmModificarPaciente.ListaPacientes = mListaPacientes; ObjFrmModificarPaciente.Show(); } private void buscarPorNombreToolStripMenuItem_Click(object sender, EventArgs e) { frmBuscarPorNombre ObjFrmBuscarNombre = new frmBuscarPorNombre(); ObjFrmBuscarNombre.MdiParent = this; ObjFrmBuscarNombre.ListaPacientes = mListaPacientes; ObjFrmBuscarNombre.Show(); } } }

6. El formulario para eliminar (frmEliminarPaciente) luce de la siguiente manera:

El botn eliminar contiene el siguiente cdigo:


private void btnEliminar_Click(object sender, EventArgs e) { mintPos = Buscar(); if( mintPos != -1) { if(MessageBox.Show("Seguro que desea eliminar el registro","Confirmacin",MessageBoxButtons.YesNo,MessageBoxIcon.Question) == DialogResult.Yes) { mListaPacientes.RemoveAt(mintPos); MessageBox.Show("Registro eliminado correctamente","Informacin", MessageBoxButtons.OK,MessageBoxIcon.Information); } } else { MessageBox.Show("El paciente con el numero de cedula digitado no se encuentra registrado. ","Advertencia", MessageBoxButtons.OK,MessageBoxIcon.Warning); } }

Para eliminar es necesario en primera instancia buscar el paciente por cedula en la lista de pacientes. Si el paciente se encuentra registrado en la lista, se almacena su ubicacin o posicin dentro de esta en la variable mintPos, si la cedula del paciente no se encuentra mintPos vale -1. Una vez realizada la bsqueda y conocida la posicin se procede a eliminar o remover el registro de la lista. El cdigo interno de formulario para eliminar, incluido el mtodo que busca si la cedula existe debera parecerse al siguiente:
using using using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Text; System.Windows.Forms; System.Collections;

namespace appPaciente1 { public partial class frmEliminarPaciente : Form { private ArrayList mListaPacientes = new ArrayList(); private int mintPos = -1; public ArrayList ListaPacientes { get{return mListaPacientes;} set{mListaPacientes = value;} } public frmEliminarPaciente() { InitializeComponent();

} private void btnCerrar_Click(object sender, EventArgs e) { this.Close(); } public int Buscar() { int intCedula = 0; Paciente objPacienteAux; int intPosEncontrado = -1; if(txtCedula.Text != "") { intCedula = int.Parse(txtCedula.Text); } for(int i = 0; i < mListaPacientes.Count;i++) { objPacienteAux = (Paciente)mListaPacientes[i]; if(objPacienteAux.Cedula == intCedula) { intPosEncontrado = i; } } return intPosEncontrado; } private void btnEliminar_Click(object sender, EventArgs e) { mintPos = Buscar(); if( mintPos != -1) { if(MessageBox.Show("Seguro que desea eliminar el registro","Confirmacin",MessageBoxButtons.YesNo,MessageBoxIcon.Question) == DialogResult.Yes) { mListaPacientes.RemoveAt(mintPos); MessageBox.Show("Registro eliminado correctamente","Informacin", MessageBoxButtons.OK, MessageBoxIcon.Information); } } else { MessageBox.Show("El paciente con el numero de cedula digitado no se encuentra registrado. ","Advertencia", MessageBoxButtons.OK,MessageBoxIcon.Warning); } } } }

7. Implementar el formulario de Modificacin de Paciente (frmModificarPaciente). Al escribir la cedula del paciente, si se encuentra el registro se deben habilitar los controles que permiten editar los campos: Nombres y Apellidos. Luego despus de modificarlos y al presionar el botn Modificar se debe actualizar en el vector la informacin.

Nota. Para habilitar o deshabilitar un control se utiliza la propiedad Enable (en true el control est habilitado, y en false deshabilitado). 8. Implementar el formulario del la opcin Buscar por Nombre (frmBuscarPorNombre), es decir presentar en una grilla los datos de la persona o personas que tengan el nombre digitado por el usuario. Para realizar este punto deben investigar cmo se maneja en control DataGridView (grilla). Al escribir en el texto el nombre a buscar y presionar el botn Buscar debe aparecer en la grilla informacin del resultado de la bsqueda.

9. Investigar cmo se usa el control tipo ErrorProvider y usarlo en el formulario Adicionar y Eliminar.

You might also like