Documentos de Académico
Documentos de Profesional
Documentos de Cultura
6 1
Objetivos
Introducción
Métodos.
A continuación se mencionan algunos métodos utilizados frecuentemente en aplicaciones Windows Forms.
MessageBox.
El método MessageBox.Show permite mostrar un cuadro de mensaje que puede contener texto, botones y
símbolos que informan e instruyen al usuario.
La sintaxis es la siguiente:
InputBox.
Aunque parezca mentira, no existe en Visual C# un diálogo para pedir un dato. Si no tienes ganas de crear tu
propio diálogo y no necesitas personalización, puedes hacer uso de la sentencia InputBox que se encuentra en
el ensamblado Microsoft.VisualBasic.
El método InputBox( ) permite mostrar un cuadro de mensaje en el que el usuario puede introducir un valor o
un mensaje en forma de texto. Muestra un indicador en un diálogo en el que el usuario puede introducir texto.
La entrada se asigna a una variable.
La instrucción InputBox es un método cómodo para introducir texto a través de un diálogo. La entrada se
devuelve como valor de retorno de la función.
La sintaxis es:
Esta sentencia muestra un diálogo modal con una etiqueta, una caja de texto, un botón para “aceptar” y otro
para “cancelar”.
La definición de la sentencia InputBox es la siguiente:
Donde:
❖ Prompt: Mensaje del diálogo.
❖ Title: Opcional. Título del diálogo.
❖ DefaultResponse: Opcional. Respuesta por defecto.
❖ xPos: Opcional. Coordenada X, por defecto centrado
❖ yPos: Opcional. Coordenada Y, por defecto centrado
Programación I. Guía No. 6 3
En la siguiente figura, observamos un ejemplo de un InputBox:
Controles Especiales.
A continuación, detallaremos controles para el manejo de errores, validaciones y para mostrar ayuda al usuario.
4 Programación I. Guía No. 6
ErrorProvider.
Proporciona una Interfaz de Usuario (UI) para indicar al usuario que el control de un formulario tiene un error
asociado.
El componente ErrorProvider de formularios Windows Forms se utiliza para indicar al usuario de forma no
intrusiva, que algo va mal. Habitualmente, se utiliza junto con la validación de entrada del usuario en un
formulario o con la presentación de errores dentro de un conjunto de datos.
ToolTip.
Muestra información cuando el usuario mueve el puntero sobre el control asociado.
Representa una pequeña ventana emergente rectangular que muestra una breve descripción de la finalidad de
un control cuando el usuario sitúa el puntero sobre el control.
El componente ToolTip de Windows Forms muestra texto cuando el usuario apunta a otros controles. Un
componente Tooltip se puede asociar con cualquier control.
Un ejemplo del uso de este control: para ahorrar espacio en un formulario, puede mostrar un pequeño icono en
un botón y utilizar un componente ToolTip para explicar la función del botón.
Procedimientos y Funciones.
Todas las instrucciones en un programa deben estar incluidas en un procedimiento o función, a las que
llamaremos mediante su identificador.
En Visual C# existen cuatro clasificaciones de este tipo de instrucciones:
➢ Los procedimientos que ejecutan un conjunto de instrucciones a petición sin devolver ningún
resultado.
➢ Las funciones que ejecutan una porción de código y devuelven el resultado al código que las invocó o
llamó.
➢ Los procedimientos de propiedades que permiten manejar las propiedades de los objetos creados
(dentro de las clases).
➢ Los procedimientos de operador utilizados para modificar el funcionamiento de un operador cuando
se aplica a una clase (class) o una estructura (struct).
Procedimientos.
La visibilidad de un procedimiento viene determinada por la declaración private, public o internal. Por defecto,
si no se indica nada, se entiende que es de tipo public.
Un procedimiento puede recibir o no parámetros, ejecuta instrucciones, pero nunca retorna ningún valor.
La sintaxis es la siguiente:
Programación I. Guía No. 6 5
Funciones.
Una función puede recibir o no parámetros, ejecuta ciertas instrucciones y la ejecución del comando return
devuelve un valor de salida de la función.
La sintaxis se muestra a continuación:
Procedimientos de propiedades.
Estos procedimientos se llaman “encapsuladores” ya que el valor de la propiedad se encapsula. Se utilizarán
cuando queramos modificar y/o recuperar un valor (Set/Get).
La sintaxis es la siguiente:
Procedimientos de operador.
Permiten la redefinición de un operador estándar del lenguaje para utilizarlo en tipos de datos personalizados
(clase o estructura) definidos por el usuario.
Procedimiento
Crear una carpeta con el nombre Practica 6 para guardar los ejemplos y ejercicios, en el escritorio de su
computadora.
Se debe crear una aplicación Windows Forms que permita ingresar los dos lados de un cuadrilátero, y debe
mostrar la figura de un cuadrado si ambos lados son iguales o mostrar un rectángulo si los valores de los dos
lados son distintos. También debe calcularse el área y el perímetro de la figura resultante.
La aplicación debe lucir parecida a la siguiente figura:
Figura 1.
Les cambiamos a todos los objetos la propiedad “Text”, de acuerdo con la figura 1.
A los TextBox del GroupBox2, les cambiaremos la propiedad “Enabled” a “False”, con el propósito de que en
ellos no pueda escribirse.
Cambiamos la propiedad “BackColor” a los PictureBox de acuerdo con nuestra preferencia.
También cambiamos la propiedad “Size” de tal manera que uno represente un cuadrado y el otro represente un
rectángulo.
Le cambiamos la propiedad “Name” a los objetos de esta manera:
Control Valor
TextBox1 txtLado1
TextBox2 txtLado2
TextBox3 txtArea
TextBox4 txtPerimetro
PictureBox1 pbxCuadrado
PictureBox2 pbxRectangulo
Button1 btnCalcular
Button2 btnNuevo
Button3 btnSalir
Programación I. Guía No. 6 7
A continuación, procedemos a programar nuestra aplicación.
Damos doble clic en el botón “Calcular” y escribimos el siguiente código en el evento “Click”:
private void btnCalcular_Click(object sender, EventArgs e)
{
//Declaración de variables
double lado1, lado2;
double area, perimetro;
//Entrada de datos
lado1 = Convert.ToDouble(txtLado1.Text);
lado2 = Convert.ToDouble(txtLado2.Text);
//Salida de la Información
txtArea.Text = Convert.ToString(area) + " cms cuadrados";
Damos doble clic en el botón “Nuevo” y escribimos el siguiente código en el evento “Click”:
private void btnNuevo_Click(object sender, EventArgs e)
{
//Para limpiar la propiedad “Text” de los objetos
txtLado1.Clear();
txtLado2.Clear();
txtArea.Clear();
txtPerimetro.Clear();
Damos doble clic en el botón “Salir” y escribimos el siguiente código en el evento “Click”:
private void btnSalir_Click(object sender, EventArgs e)
{
Close();
}
Luego, tenemos que ocultar los PictureBox de tal manera que cuando la aplicación cargue no se visualicen,
sino hasta que se dé clic al botón “Calcular”.
Para ello, ubicamos el método constructor de nuestra clase y agregaremos las siguientes líneas de código:
8 Programación I. Guía No. 6
public FrmUsoIf()
{
InitializeComponent();
Figura 2.
if (txtLado1.Text == string.Empty)
{
// El método SetError() se utiliza para enviar el error
errorControl.SetError(txtLado1, "Ingrese el valor del Lado 1");
sin_error = false; // Cambiamos a “false”, pues ocurrió un error
}
else // Para validar los otros controles
{
try
{
// Declaramos una variable para capturar lo que digite el usuario
double Lado1 = Convert.ToDouble(txtLado1.Text);
}
catch
{
errorControl.Clear(); // Limpiar todos los mensajes de error
errorControl.SetError(txtLado1, "Ingrese un valor válido");
return false;
}
if (txtLado2.Text == string.Empty)
{
errorControl.SetError(txtLado2, "Ingrese el valor del Lado 2");
sin_error = false; // Cambiamos a “false”, pues ocurrió un error
}
else
{
Programación I. Guía No. 6 9
try
{
double Lado2 = Convert.ToDouble(txtLado2.Text);
}
catch
{
errorControl.Clear(); // Limpiar todos los mensajes de error
errorControl.SetError(txtLado2, "Ingrese un valor Válido");
return false;
}
}
return sin_error; //Retornamos la variable que controla si ha ocurrido un error
}
return sin_error; //Retornamos la variable que controla si ha ocurrido un error
}
El siguiente paso es hacer la validación en el botón “Calcular”. Agregamos las siguientes líneas de código al
inicio del evento “Click”:
if (is_validate())
{
errorControl.Clear();
/* Acá colocamos todas las instrucciones que queremos que se ejecuten al dar clic al
Botón */
}
En Visual C# podemos utilizar el control “ToolTip” para mostrar mensajes al usuario. En nuestro ejemplo lo
utilizaremos para indicar al usuario que es lo que tiene que hacer en la aplicación.
Lo primero que tenemos que hacer es agregar el control a nuestro formulario. Este control no aparecerá
visualmente en nuestro formulario, pero podemos asegurarnos que se ha agregado, revisando si en la parte
inferior del IDE se encuentra el mismo (ver figura 3).
Figura 3.
Para desarrollar este ejemplo, no crearemos un nuevo proyecto, sino que lo haremos en el mismo proyecto en
que trabajamos el ejemplo 1. Para ello, agregaremos un nuevo formulario a dicho proyecto.
Para hacer esto, debemos seguir los siguientes pasos:
Dar clic derecho sobre el nombre del proyecto.
En el menú contextual, dar clic a la opción “Agregar”.
En el nuevo menú contextual que aparece dar clic en la opción “Windows Forms”.
Acá tenemos que darle un nombre al formulario, en nuestro caso le daremos el nombre “FrmRepetitivas”.
Programación I. Guía No. 6 11
De esta forma, nos agrega un nuevo formulario a nuestro proyecto. Podemos verificarlo en la ventana
“Explorador de Soluciones”. Además, nos cargará el nuevo formulario en el área de edición del proyecto (área
central del IDE) (ver figura 4).
Figura 4.
Para diseñar esta aplicación utilizaremos un control que nos permite visualmente, tener más de un entorno en
el mismo formulario, este es el control “TabControl”.
Agregamos entonces el objeto “TabControl”. Observemos que este control genera dos páginas “tabPage1” y
“tabPage2” y en cada una de ellas podemos diseñar dos entornos diferentes (ver figura 5).
Figura 5.
Lo primero que haremos con este control es cambiar el nombre a los tabPages, para ello tenemos que modificar
la propiedad “TabPages”. Damos clic en los tres puntos que aparecen en esta propiedad en la ventana
“Propiedades” (ver figura 6).
Figura 6.
Figura 7.
Acá seleccionamos en el área “Miembros” cada uno de los tabPages y les cambiaremos la propiedad “Text”,
así:
tabPage1 → Datos Personales
tabPage2 → Datos Académicos
Una vez hecho esto damos clic al botón “Aceptar”. Regresamos al formulario y observamos que los nombres
de los tabPages han sido personalizados (ver figura 8).
Figura 8.
Vamos a trabajar con el tabPage “Datos Personales”. Para ello, damos clic en su nombre.
Vamos a agregar los siguientes controles: 2 GroupBox, 6 Label, 1 PictureBox, 3 TextBox, 2 RadioButton, 1
ComboBox, 1 DateTimePicker y 1 CheckBox.
La ficha debe lucir parecida a la imagen mostrada en la figura 9.
Les cambiamos a todos los objetos la propiedad “Text”, de acuerdo con la figura 9.
Programación I. Guía No. 6 13
Figura 9.
Vamos a modificar la propiedad “Items” del ComboBox. Damos clic en los tres puntos que aparecen en esta
propiedad en la ventana “Propiedades”.
Al hacer esto, nos carga una ventana como la que muestra la figura siguiente:
En esta ventana escribiremos los nombres de las asignaturas. Damos clic en el botón “Aceptar”.
14 Programación I. Guía No. 6
Cambiaremos la propiedad “BackgroundImage” del PictureBox para agregarle una imagen como fondo.
Damos clic en los tres puntos que aparecen en esta propiedad en la ventana “Propiedades”.
Al hacer esto, nos carga una ventana como la que observamos en la siguiente imagen:
Seleccionamos la opción “Archivo de recurso del proyecto”, luego damos clic en el botón “Importar”. Nos
carga una ventana, en la cual tenemos que buscar una imagen previamente descargada, la seleccionamos y
damos clic en el botón “Abrir”.
Cambiamos la propiedad “BackgroundimageLayout” a su valor “Strech”, para que la imagen luzca centrada
en el control PictureBox.
Al control DataTimePicker le cambiamos la propiedad “Format” a su valor “Short”, para que nos aparezca la
fecha en un formato corto.
Presionamos la tecla “F5” para visualizar el funcionamiento de nuestra aplicación. Al hacer esto, observamos
que nos carga el formulario del ejemplo1. Para cambiar esto, damos clic en “Program.cs” en la ventana
“Explorador de soluciones”. Observemos que en el comando “Applicatiom.Run()” está ejecutando el
formulario del ejemplo 1. Tenemos que cambiar esta instrucción para que ejecute el formulario correspondiente
al ejemplo 2.
radioButton2 rbtnMujer
comboBox1 cmbMateria
dateTimePicker1 dtpIngreso
checkBox1 chbxMostrar
Figura 10.
Ahora vamos a trabajar con el tabPage “Datos Académicos”. Para ello, damos clic en su nombre.
Vamos a agregar los siguientes controles: 2 GroupBox, 4 Label, 4 TextBox y 3 Button.
La ficha debe lucir parecida a la siguiente figura:
Figura 11.
Les cambiamos a todos los objetos la propiedad “Text”, de acuerdo con la figura 11.
Programación I. Guía No. 6 17
Le cambiamos la propiedad “Name” a los objetos de esta manera:
Control Valor
TextBox1 txtCantidad
TextBox2 txtPromedio
TextBox3 txtNotaMin
TextBox4 txtNotaMax
Button1 btnIngresar
Button2 btnNuevo
Button3 btnSalir
De esta forma hemos terminado el diseño de nuestra aplicación. A continuación, procedemos a realizar la
codificación de los botones.
Para ingresar los datos de las evaluaciones y las notas utilizaremos un control “InputBox”. Para ello tenemos
que agregar una referencia. Vamos a la ventana “Explorador de soluciones”, ubicamos el elemento
“References (Referencias)”, damos clic derecho, en el menú contextual que aparece, damos clic en la opción
“Agregar referencia…”
Figura 12.
Ahora si ya podemos utilizar el control “InputBox”. Primero, declaramos las variables que utilizaremos, las
declaramos de tipo global, es decir, fuera de todo evento, así:
// Declaramos variables a utilizar
private string[,] Evaluaciones; /* Matriz para almacenar el nombre de la evaluación y la nota
obtenida */
double promedio = 0;
double minimo = 11, maximo = 0; // Para comparar con las notas obtenidas
string EvalMin, EvalMax; // Para almacenar el nombre de las evaluaciones
Damos doble clic al botón “Ingresar”. Agregamos el siguiente código al método “Click”:
private void btnIngresar_Click(object sender, EventArgs e)
{
//Declaración de variables
int cantNotas;
double suma = 0;
//Entrada de datos
cantNotas = Convert.ToInt32(txtCantidad.Text);
//Salida de información
txtPromedio.Text = Convert.ToString(promedio);
txtNotaMin.Text = EvalMin.ToUpper() + " : " + Convert.ToString(minimo);
txtNotaMax.Text = EvalMax.ToUpper() + " : " + Convert.ToString(maximo);
}
Damos doble clic al botón “Nuevo”. Agregamos el siguiente código al método “Click”:
private void btnNuevo_Click(object sender, EventArgs e)
{
// Limpiamos todos los cuadros de texto
txtCantidad.Clear();
txtPromedio.Clear();
txtNotaMin.Clear();
txtNotaMax.Clear();
Damos doble clic al botón “Salir”. Agregamos el siguiente código al método “Click”:
private void btnSalir_Click(object sender, EventArgs e)
{
Close();
}
Para solucionar este problema, agregaremos un nuevo formulario en el proyecto que hemos creado al inicio de
este guía; para ello utilizaremos el método mostrado en el ejemplo 2. Nombraremos el formulario como
“FrmCuenta”.
El formulario debe lucir parecido al que se muestra en la figura 13.
Vamos a agregar los siguientes controles al formulario: 3 GroupBox, 5 Label, 3 TextBox, 5 Button y 2 ListBox.
Le cambiamos la propiedad “Text” a los GroupBox así:
GroupBox1 → Ingresar Datos de la Cuenta
20 Programación I. Guía No. 6
GroupBox2 → Transacciones
GroupBox3 → Historial de Transacciones
Figura 13.
Para que el formulario no tenga los botones de control (Maximizar, Minimizar, Cerrar) tenemos que colocar el
valor “False” en las siguientes propiedades: “ControlBox”, “MinimizeBox”, “MaximizeBox”.
Les cambiamos a todos los objetos la propiedad “Text”, de acuerdo con la figura 13.
De esta forma hemos terminado el diseño de nuestra aplicación. A continuación, procedemos a realizar la
codificación de la aplicación.
Primero declaramos las variables globales que necesitaremos:
private Double monto; // Para almacenar el monto de la cuenta
Lo siguiente será dar doble clic al botón “SALIR”, y en su evento “Click” digitaremos lo siguiente:
Programación I. Guía No. 6 21
Close();
Esto nos servirá para cerrar nuestra aplicación, pues el formulario no tiene el botón por defecto “X”.
Vamos a definir dos procedimientos: uno para desactivar un grupo de controles y otro para activar ese mismo
grupo de controles.
La lógica que utilizaremos es que los botones “Deposito” y “Retiro” inicialmente estarán deshabilitados, y se
habilitarán hasta que se abra la cuenta de ahorros.
Entonces agregamos el siguiente código en el cuerpo de la clase que define nuestro formulario:
//Procedimiento que permite activar los controles
private void ActivarControles()
{
// Se habilitan los botones de las transacciones
btnDeposito.Enabled = true;
btnRetiro.Enabled = true;
Presionamos “F5” para que la aplicación se ejecute, y observaremos que los botones “Depósito” y “Retiro”
se encuentran deshabilitados.
A continuación, vamos a definir una función que nos va a servir para capturar el monto de dinero que se va a
operar en cualquiera de las dos transacciones:
/* Función para capturar el monto digitado por el usuario para cualquiera de las dos transacciones.
Recibirá como parámetro una cadena de caracteres */
private Double Leer(string mensaje)
{
//Leemos la cantidad a retirar o depositar con un “InputBox”
Double cantidad;
cantidad = Convert.ToDouble(Microsoft.VisualBasic.Interaction.InputBox("Ingrese monto a " +
mensaje, "Gestión de Ahorros", "0"));
return cantidad; // Valor devuelto por la función al código que la invoca
22 Programación I. Guía No. 6
Recordemos que para utilizar un control InputBox debemos agregar la referencia “Microsoft.VisualBasic”.
También definiremos un procedimiento que muestre el saldo de la cuenta en cualquier momento:
// Procedimiento que permite mostrar el monto actual
private void Mostrar()
{
// Mostrará el saldo existente en la cuenta en el TextBox correspondiente
// Para mostrar el valor siempre con dos decimales, aunque se introduzca sin decimales
txtSaldo.Text = "$ " + monto.ToString("####0.00");
}
Damos doble clic en el botón “Abrir Cuenta”, colocamos el siguiente código en el evento “Click”:
private void btnAbirCuenta_Click(object sender, EventArgs e)
{
string NombreCliente;
NombreCliente = txtCliente.Text;
Podemos probar nuestra aplicación y observaremos que, si el monto es mayor que cero, los controles de
apertura de cuenta se desactivan y se activan los botones de transacciones (ver figura 14).
Figura 14.
Programación I. Guía No. 6 23
Damos doble clic en el botón “Depósito” y en el evento “Click” colocamos el siguiente código:
private void btnDeposito_Click(object sender, EventArgs e)
{
double deposito; // monto de dinero a depositar
Tenemos que dar doble clic al botón “Retiro” y en el evento “Click” colocamos el siguiente código:
private void btnRetiro_Click(object sender, EventArgs e)
{
double retiro; // monto de dinero a retirar
Ahora codificamos el botón “Nuevo Cliente”, damos doble clic y colocamos el siguiente código en el evento
“Click”:
private void btnNuevo_Click(object sender, EventArgs e)
{
// Limpiamos todos los controles para poder ingresar un nuevo cliente
txtCliente.Clear();
txtMonto.Clear();
txtSaldo.Clear();
lstDepositos.Items.Clear();
lstRetiros.Items.Clear();
Sin embargo, no hemos validado los datos que introduce el usuario. Vamos a validar en una forma distinta lo
que el usuario debe digitar en los TextBox del área de ingreso de datos.
24 Programación I. Guía No. 6
Damos clic en el botón y ubicamos el método “KeyPress” y damos doble clic en el área en blanco a la par del
nombre:
Dar doble
clic acá
Podemos probar nuestra aplicación, intentando digitar números como nombre del cliente, veremos la siguiente
imagen (ver figura 15).
Algo similar haremos con el TextBox donde debe digitarse el monto con el que se apertura la cuenta. Solo que
aquí debemos validar que no se introduzcan letras, así:
Figura 15.
Podemos probar nuestra aplicación, intentando digitar letras como monto, veremos algo parecido a la figura
siguiente:
Figura 16.
/* Esta variante del evento Show, muestra el formulario con un propietario especificado, en
este caso, el “FrmMenu”, y se utiliza el puntero this para referirse a él */
IrEjemplo1.Show(this); // Para mostrar el formulario deseado
this.Hide(); // Ocultamos Formulario padre, es decir “FrmMenu”
}
/* Esta variante del evento Show, muestra el formulario con un propietario especificado, en
este caso, el “FrmMenu”, y se utiliza el puntero this para referirse a él */
IrEjemplo2.Show(this); // Para mostrar el formulario deseado
this.Hide(); // Ocultamos Formulario padre, es decir “FrmMenu”
}
Debemos agregar una línea de código a cada método “Click” de los botones “Salir” de los ejemplos 1 y 2, así:
private void btnSalir_Click(object sender, EventArgs e)
{
// Esta línea debe agregarse hasta que se implemente el ejemplo 4
this.Owner.Show(); // Para llamar al formulario propietario (padre), es decir "FrmMenu"
Close();
}
Antes de probar la aplicación tenemos que cambiar en “Program.cs”, que corra el formulario que acabamos
de crear, es decir;
Application.Run(new FrmMenu());
Hoy si, podemos probar nuestro primer menú creado con formularios.
Ejercicios de práctica
Tarea Complementaria
3. Elaborar una aplicación en Windows Forms que a partir de un Menú Principal permita llamar a las
siguientes aplicaciones:
a. Solicitar al usuario que digite un año, y debe determinarse si es un año bisiesto o no.
b. Ingresar la nota final de “N” estudiantes y mostrar los datos ordenados en forma ascendente.
c. Solicitar al usuario que introduzca un número del 1 al 12 y de acuerdo con el dato introducido
se muestre el número de días que posee ese mes del año con su respectivo nombre. (NOTA:
Febrero tiene 28 días)
Por ejemplo:
Digitamos: 3
Nos presenta: El mes de Marzo posee 31 días
Debe resolverse utilizando la estructura repetitiva “switch”.
Bibliografía
❖ Deitel, Harvey M. y Paul J. Deitel, Cómo Programar en C#, Segunda Edición, México, 2007.