Está en la página 1de 43

Captulo 5

Windows Forms
Uno de los principales objetivos de la educacin debe ser ampliar las ventanas por las cuales vemos
al mundo
La caridad es un deber; la eleccin de la forma, un derecho.

Tabla de Contenido
Windows Forms .......................................................................................................................5.2
Creacin de Proyectos .............................................................................................................5.4
El espacio de nombres System.Windows.Forms......................................................................5.6
Insertando controles dentro de la forma ...................................................................................5.7
Insercin de Cdigo ...............................................................................................................5.10
Caja de Mensajes (MessageBox)...........................................................................................5.16
Caja de Seleccin ..................................................................................................................5.23
Visor de Imgenes y Enlaces .................................................................................................5.26
Web Browser y Creacin de Mens .......................................................................................5.30
Formas que llaman a otras formas .........................................................................................5.33
Creacin de Propiedades en una Clase .............................................................................5.36
Matrices en dataGridView...................................................................................................5.38
Creacin de Mens ............................................................................................................5.40

5.1

Captulo 5: Windows Forms

Windows Forms
Windows Forms es una de las dos tecnologas que se utiliza en Visual C# para crear
aplicaciones cliente inteligentes basadas en Windows que se ejecutan en .NET Framework.
Windows Forms es especialmente adecuado para escenarios de desarrollo rpido de
aplicaciones donde la prioridad principal no es una interfaz grfica de usuario compleja. El
Diseador de Windows Forms se utiliza para crear la interfaz de usuario, y permite obtener
acceso a otras caractersticas de diseo y ejecucin, tales como las siguientes:
Implementacin ClickOnce.
Uso avanzado de bases de datos mediante DataGridView (Control, formularios
Windows Forms).
Barras de herramientas y otros elementos de interfaz de usuario que pueden tener el
aspecto y el comportamiento de Microsoft Windows XP, Microsoft Office o Microsoft
Internet Explorer.
En Visual C#, podemos utilizar el Diseador de Windows Forms o el Diseador de Windows
Presentation Foundation (WPF) para crear interfaces de usuario de forma rpida y cmoda.
Los tres pasos bsicos para crear interfaces de usuario son:
1. Agregar los controles a la superficie de diseo.
2. Establecer las propiedades iniciales de los controles.
3. Escribir los controladores para los eventos especificados.

Agregar controles
En cualquiera de los diseadores se utiliza el mouse para arrastrar controles, que son los
componentes con representacin visual, como botones y cuadros de texto, hasta una superficie
de diseo
A medida que se trabaja visualmente, el Diseador de Windows Forms traduce las acciones en
cdigo fuente de C# y las escribe en un archivo de proyecto llamado nombre.designer.cs donde
nombre es el nombre asignado al formulario. De igual forma, WPF Designer traduce las
acciones de la superficie de diseo a cdigo de lenguaje de marcado de aplicaciones
extensible (XAML) y lo escribe en un archivo de proyecto que se denomina Window.xaml.
Cuando se ejecuta la aplicacin, ese cdigo fuente (Windows Forms) o cdigo XAML (WPF)
ajustar la posicin y el tamao de los elementos de la interfaz de usuario de modo que
aparezcan como en la superficie de diseo.
Establecer propiedades
Despus de agregar un control a la superficie de diseo, podemos utilizar la ventana
Propiedades para establecer sus propiedades, como son el color de fondo y el texto
predeterminado.
5.2

Captulo 5: Windows Forms

En el Diseador de Windows Forms, los valores que especifique en la ventana Propiedades


son los valores iniciales que se asignarn a la propiedad cuando se cree el control en tiempo
de ejecucin. En el Diseador de WPF, los valores que especifique en la ventana Propiedades
se almacenan como atributos en el archivo XAML de la ventana.
En muchos casos, se puede tener acceso a estos valores o modificarlos mediante
programacin en tiempo de ejecucin; para ello, basta con obtener o establecer desde la
aplicacin la propiedad para la instancia de la clase del control. La ventana Propiedades
resulta til en tiempo de diseo porque permite examinar todas las propiedades, eventos y
mtodos que admite un control.
Controlar eventos
Los programas con interfaces de usuario grficas son principalmente controlados por eventos.
Estos programas esperan a que un usuario haga algo, como escribir texto en un cuadro de
texto, hacer clic en un botn o cambiar la seleccin de un cuadro de lista. Cuando esto sucede,
el control, que es simplemente una instancia de una clase de .NET Framework, enva un
evento a la aplicacin. Tiene la opcin de controlar un evento escribiendo un mtodo especial
en la aplicacin al que se llamar cuando se reciba el evento.
Podemos utilizar la ventana Propiedades para especificar qu eventos desea tratar en el
cdigo. Si seleccionamos un control en el diseador y hacemos clic con el icono Rayo en el
botn Eventos de la barra de herramientas de la ventana Propiedades para ver los eventos del
control. El icono siguiente muestra el botn de eventos.
Al agregar un controlador de evento desde la ventana Propiedades, el diseador escribe
automticamente el cuerpo del mtodo vaco. Debemos escribir el cdigo de manera que el
mtodo haga algo til. La mayora de los controles generan muchos eventos, pero
normalmente una aplicacin slo tendr que tratar algunos de ellos o incluso slo uno.

5.3

Captulo 5: Windows Forms

Creacin de Proyectos
Para abrir Visual C# Express Edition 2008 ejecutamos el programa directamente o con los
acceso directos.

5.4

Captulo 5: Windows Forms

Automticamente nos aparece la siguiente pantalla:

El entorno de desarrollo de Visual C# podr ser diferente al


mostrado en la pantalla superior para modificar el entorno nos
podemos ir al men Ver y agregamos los elementos que
necesitemos, por ejemplo uno elementos imprescindible es el
Cuadro de Herramientas, podemos seleccionar para visualizarlo
como se muestra en la pantalla de la izquierda o tambin dar clic
en el botn de la barra de herramientas o con las teclas de acceso
rpido que serian Ctrl+W, X.

En el cuadro de herramientas
tenemos tres opciones desde
cerrar para desaparecer el
cuadro, ocultar automticamente
o colocarla flotante, acoplable,
etc.

5.5

Captulo 5: Windows Forms

El espacio de nombres System.Windows.Forms


El espacio de nombres (namespace) System.Windows.Forms contiene clases para crear
aplicaciones basadas en ventanas que toman ventaja completa de las caractersticas de una
interfaz de usuario disponibles en el sistema operativo Windows de Microsoft.
La siguiente tabla muestra las clases en este espacio de nombres agrupadas en categoras.
Categora de la clase

Detalles
La mayora de las clases dentro de este espacio de
nombres derivan de la clase Control. La clase Control
provee la funcionalidad bsica para todos los controles
Control, Control de que se despliegan en una forma. La clase Form representa
usuario y Forma
una ventana en una aplicacin. Esta incluye cajas de
dialogo, ventanas modales e Interfaces de Mltiple
Documento. Tambin se pueden crear controles propios de
usuario derivndolos de la clase UserControl.
Las Formas contienen un conjunto muy rico de clases para
crear sus propias barras de herramientas y mens con
apariencia
moderna
y
comportamiento.
ToolStrip,
Mens y Toolbars
MenuStrip, ContextMenuStrip y StatusStrip se pueden usar
para crear barras de herramientas, barras de men, mens
de contexto y barras de status respectivamente.
Este espacio de nombres provee una variedad de clases
control que se pueden usar para crear interfaces de
Controles
usuario como TextBox, ComboBox, Label, ListView, Button,
WebBrowser, HtmlDocument, MaskedTextBox y PropertyGrid.
Algunas clases ayudad a controlar la distribucin de una
Layout
superficie
de
despliegue
como:
FlowLayoutPanel,
TableLayoutPanel y SplitContainer.
Las formas Windows definen una arquitectura ideal para
ligarlas a fuentes de datos tales como bases de datos y
Data y Data Binding
archivos
XML,
estos
controles
son:
DataGridView,
BindingNavigator, BindingSource
Adems de controles este espacio de nombres provee otras
clases que no derivan de la clase Control pero que
proveen caractersticas visuales a una aplicacin
Componentes
Windows. Tales clases como ToolTip y ErrorProvider
proveen informacin al usuario as tambin las clases
Help y HelpProvider.
Windows provee cajas de dialogo con propsitos especiales
como son OpenFileDialog, SaveFileDialog, FontDialog,
Cajas
de
Dilogos PageSetupDialog, PrintPreviewDialog y PrintDialog. Este
comunes
espacio de nombres provee la clase MessageBox para
desplegar una caja de mensaje que puede desplegar y
obtener datos del usuario.
Las Formas contienen un conjunto muy rico de clases para
Mens y Toolbars
crear sus propias barras de herramientas y mens con
apariencia
moderna
y
comportamiento.
ToolStrip,
5.6

Captulo 5: Windows Forms

MenuStrip, ContextMenuStrip y StatusStrip se pueden usar


para crear barras de herramientas, barras de men, mens
de contexto y barras de status respectivamente.
Hay algunas clases dentro de System.Windows.Forms que proveen soporte a las clases
mencionadas arriba. Ejemplos son: enumeraciones, clases argumento evento y delegados
usados por eventos dentro de controles y componentes.

Insertando controles dentro de la forma


Una ventana muy til es la ventana de propiedades si no la tenemos disponible nos vamos al
men Ver Ventana Propiedades esta nos muestra la propiedad de cualquier control, por
ejemplo un botn, cuadro de texto, etiqueta.
Vamos a modificar las propiedades de la forma Form1 en primer lugar la seleccionamos y nos
vamos a la ventana de propiedades, aqu vemos en la parte superior el recuadro con el
siguiente texto: Form1 System.Windows.Forms.Form al final contiene una flecha hacia abajo
en ella podemos seleccionar los diferente elementos y modificar sus propiedades, en este
momento no tenemos ningn otro elemento solo la forma.
Seleccionamos la forma, haciendo clic sobre ella en la ventana Propiedades es posible
modificar las propiedades de la misma vamos a modificar el titulo de la ventana que por default
es Form1 a Multiplica para ello nos vamos a Apariencia Text y escribimos
Multiplica como se muestra en la siguiente pantalla.

5.7

Captulo 5: Windows Forms

Algunas propiedades tienen un botn a la izquierda con un signo + lo cual indica que estas
propiedades se componen de varias partes, por ejemplo en Font aparece el smbolo de mas
porque es posible cambiar el tipo de letra.

Podemos expandir en el cuadro de herramientas que


necesitemos, por ejemplo si expandimos la opcin de
Controles comunes dando clic en el smbolo de ms.
Las componentes estn acomodadas por funcionalidad y en
forma alfabtica.
Si deseamos insertar algn control a la forma simplemente lo
seleccionamos y lo arrastramos en el interior de la forma en la
posicin que queramos, posteriormente podemos mover el
control dentro de la forma, cambiar las propiedades, posicin
tamao, nombre, color, etc. Vamos a insertar en la forma dos
etiquetas

, tres cajas de texto

y un botn

.
El objetivo de las etiquetas es proveer de los elementos
necesarios para ingresar dos nmeros y efectuar la
multiplicacin mostrando el resultado.

Por default Visual C# asigna los nombres a las etiquetas como label1, label2, button1,
textBox1, etc. Desde la ventana propiedades podemos modificar el nombre y las
caractersticas de la ventana. En la imagen siguiente se muestra el procedimiento a seguir para
cambiar las propiedades de cualquier elemento, en particular, la imagen se refiere al cambio
de propiedades del control button1.
Otra forma de ver las propiedades es seleccionar cualquier control damos clic con el botn
derecho en la opcin Propiedades y automticamente nos muestra las propiedades de dicho
control, esto se ilustra en la siguiente figura:

5.8

Captulo 5: Windows Forms

Las figuras siguientes muestran ambas formas antes y despus de ser modificadas.

5.9

Captulo 5: Windows Forms

Insercin de Cdigo
Antes de describir como insertar cdigo
en
nuestra aplicacin
es
muy
importante identificar el nombre de cada
uno de los controles, en la imagen se
identifican cada uno de ellos, dichos
nombres los asigna automticamente
Visual C# al insertar cada control, es
posible cambiar el nombre de cada uno
de ellos,
al seleccionarlo y en la
ventana de Propiedades, apartado
Diseo campo (Name) modificar el
nombre , en nuestro ejemplo vamos a
dejar intactos cada nombre de los
controles utilizados esto facilita la
programacin de nuestra aplicacin
pues es ms fcil identificar los
elementos. Un error comn es confundir
esta propiedad con Text en el apartado
Apariencia cambiamos button1 por Multiplicar, esto debido a que inicialmente Visual C#
asigna el mismo nombre en ambas propiedades, pero uno es como se observa en la ventana
dentro de la forma y la propiedad (Name) en Diseo es como lo identifica Visual C# al
momento de programar.
5.10

Captulo 5: Windows Forms

Para insertar cdigo es importante identificar la utilidad de cada control insertado como se
describe en la siguiente tabla.

Control (Diseo)

Control (Apariencia)

label1

Operador 1

textBox1

----------

label2

Operador 2

textBox2

----------

button1

Multiplicar

textBox3

----------

Objetivo
Mostrar un texto que ayude al
usuario a identificar que dato
debemos introducir.
Recibir un nmero .
Mostrar un texto que ayude al
usuario a identificar que dato
debemos introducir.
Recibir otro nmero.
Dar clic en el botn para realizar
la multiplicacin de los datos
introducidos en textBox1 y textBox2
Mostrar
el
resultado
de
la
multiplicacin.

En la columna Control (Apariencia) aparece ---------- significa que no aplica, es decir


no se modific la propiedad.
Si analizamos nuestros elementos, el control que efectuar la Multiplicacin es button1 por lo
tanto para insertar cdigo damos doble clic sobre l y nos trasladara de Form1.cs (Diseo)
que digamos es la parte grfica a la ventana Form1.cs que bsicamente sera el cdigo de
nuestra aplicacin.

El cdigo que se inserta aparece encerrado en el rectngulo, vemos que el mtodo se llama
button1_Click que nos indica que realizar cuando demos doble clic sobre el botn.

Veamos que realiza cada lnea.

5.11

Captulo 5: Windows Forms

En la lnea 51 double ct1, ct2; declaramos dos variable de tipo doubl esto llamadas ct1 y
ct2 para hacer referencia a cuadro de texto 1 y 2, el tipo es para que podamos multiplicar
cualquier tipo de nmero y no solo enteros.
ct1 = Convert.ToDouble(textBox1.Text); lnea 53 extrae la entrada del usuario de
textBox1 y lo convierte a doble esto debido a que por default la entradas las maneja como
cadena y el valor se lo asignamos a ct1.En la lnea 54 es similar pero para el cuadro de texto
dos.
En textBox3 es donde mostramos el resultado de la multiplicacin, para dar formato
escribimos {0:F2} el cero significa que es el primer argumento, la letra F que vamos a
imprimir un valor de tipo doble y el nmero 2 permite imprimir el resultado con dos decimales. Y
multiplicamos los valores ct1*ct2 que es el resultado que aparecer en textBox3.
En la lnea 56 String.Format La clase String dispone del mtodo Format que nos permite
formatear una expresin.
Podemos copiar el cdigo aqu:

Multiplica.cs
// cdigo que debemos insertar en el mtodo button1_Click
private void button1_Click(object sender, EventArgs e)
{
double ct1, ct2;
// extrae la entrada del usuario
ct1 = Convert.ToDouble(textBox1.Text);
ct2 = Convert.ToDouble(textBox2.Text);
// muestra el resultado
textBox3.Text =String.Format("{0:F2}", ct1*ct2);
}

Para ejecutar el programa presionamos la tecla F5 o en el men Depurar damos clic en


Iniciar depuracin.

5.12

Captulo 5: Windows Forms

Una tercera opcin es dar clic en el botn

que aparece en la barra de herramientas.

La pantalla muestra un ejemplo de la ejecucin del


programa. Observamos que efectivamente el resultado lo
muestra con dos decimales.

Un cdigo ms elaborado que mostrara exactamente


el mismo funcionamiento de nuestra aplicacin sera:
Multiplica.cs
// cdigo que debemos insertar en el mtodo button1_Click
private void button1_Click(object sender, EventArgs e)
{
double ct1, ct2, m;
string r;
// extrae la entrada del usuario
ct1 = Convert.ToDouble(textBox1.Text);
ct2 = Convert.ToDouble(textBox2.Text);
m = ct1 * ct2;
r = (String.Format("{0:F2}", m));
textBox3.Text = r;// muestra el resultado
}

5.13

Captulo 5: Windows Forms

Insertamos la variable string r y le asignamos el resultado antes de asignarla a


textBox3.Text, tambin declaramos otra variable de tipo doubl llamada m, este cdigo tiene
ms lneas que el anterior, pero podra ser ms claro.
Vamos a insertar dos controles de tipo botn, el primero para limpiar los campos y el otro para
salir de la aplicacin como se muestra en la siguiente figura:

Mostramos el cdigo sombreado en color amarillo, para el botn 2, que nos sirve para limpiar
los campos de las tres cajas de texto, despus de realizar un clculo podemos limpiar el campo
con este botn.

private void button2_Click(object sender, EventArgs e)


{
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
}

5.14

Captulo 5: Windows Forms

Para salir de la aplicacin simplemente escribimos Close();, veamos el cdigo insertado:


private void button3_Click(object sender, EventArgs e)
{
Close();
}

Veamos ahora un segundo ejercicio, crearemos un convertidor de temperaturas de grados


Centgrados a grados Fahrenheit, y viceversa, el usuario tiene la opcin de elegir en qu
sentido desea realizar la conversin, la siguiente figura muestra los controles insertados en la
forma.
Ejemplo de la ejecucin:
Del lado izquierdo convierte de C a F y del lado derecho convierte de F a C

El cdigo insertado para convertir de C a F es:


private void button1_Click(object sender, EventArgs e)
{
double gfarenheit, ct1;
ct1 = Convert.ToDouble(textBox1.Text);
gfarenheit = ct1 * 1.8 + 32.0;
textBox2.Text = String.Format("{0:F3}", gfarenheit);
}
El cdigo insertado para convertir de F a C es:

5.15

Captulo 5: Windows Forms

private void button2_Click(object sender, EventArgs e)


{
double gcentigrados, ct1;
ct1 = Convert.ToDouble(textBox1.Text);
gcentigrados = (ct1 - 32.0)/1.8;
textBox2.Text = String.Format("{0:F3}", gcentigrados);
}
El cdigo para los botones de Limpiar y Salir, son identicos al del ejemplo Multiplica.

Caja de Mensajes (MessageBox)


Vamos a estudiar el mtodo Show de la clase MessageBox. Dicho mtodo es polimorfo y
puede mandarse llamar de 21 diferente maneras. La que veremos aqu tiene la forma:

DialogResult MessageBox.Show(string text, string caption,


MessageBoxButtons buttons, MessageBoxIcon icon);

La primera cadena (text), se despliega como mensaje en una caja de dialogo.


La segunda cadena (caption), se despliega como ttulo de la caja de dialogo o ventana
buttons es un elemento de la enumeracin MessageBoxButtons que puede tomar uno de seis
diferentes valores y que dependiendo de ello mostrar 1, 2 o 3 botones en la caja de dialogo:
OK
OKCancel
YesNo
YesNoCancel
RetryCancel
AbortRetryIgnore
icon es un elemento de la enumeracin MessageBoxIcon que puede tomar uno de cuatro
diferentes valores y que dependiendo de ello mostrar el icono correspondiente:
Information
Exclamation
Question
Error

5.16

Captulo 5: Windows Forms

Este mtodo Show de MessageBox siempre nos regresar un resultado del tipo DialogResult y
ste depender del botn que oprimamos al cerrar el dialogo de Mensaje. DialogResult es
una enumeracin que tiene los siguientes valores:
DialogResult.OK
DialogResult.Cancel
DialogResult.Yes
DialogResult.No
DialogResult.Ignore
DialogResult.Abort
DialogResult.Retry

Crearemos un nuevo proyecto al que llamaremos MessageBoxes. En la forma Form1


generada, depositaremos:

2 Etiquetas (Label)

2 Cajas de agrupamiento (GroupBox)

1 Botn (Button)

10 Botones de radio (RadioButton)

Nuestra forma quedara de la siguiente manera:

5.17

Captulo 5: Windows Forms

Cambiemos las propiedades segn se muestra en la siguiente tabla, la propiedad Name de


cada elemento no se cambia:
Componente
Form1
label1
label2
button1
groupBox1
groupBox2
radioButton1
radioButton2
radioButton3
radioButton4
radioButton5
radioButton6
radioButton7
radioButton8
radioButton9
radioButton10

Propiedad
Text
Text
Name
Text
Text
Text
Text
Text
Checked
Text
Text
Text
Text
Text
Text
Checked
Text
Text
Text

Valor
Ejemplos MessageBox
Elige el MessageBox para visualizarlo
label2
== nada ==
Visualizar
Tipo de botn
Tipo de icono
OK
True
OK Cancel
Yes
No
Yes
No
Cancel
Retry
Cancel
Abort Retry Cancel
Information
True
Exclamation
Question
Error

De tal manera que nuestra forma quedara as:

5.18

Captulo 5: Windows Forms

Ahora programemos el evento para que se genere un cambio en la seccin Tipo de Botn del
lado izquierdo, teniendo seleccionado el radioButton1 con etiqueta OK, hagamos clic en el
botn que tiene un rayo en la ventana de propiedades (para seleccionar eventos) y
seleccionemos CheckedChange, a la derecha escribamos como nombre para el mtodo que se
va a ejecutar cuando este evento se lleve a cabo, tipoDeBoton_CheckedChange, hagamos lo
mismo para los otros cinco radioButtons restantes seleccionando siempre el mismo mtodo.

Lo que sigue es agregar una variable privada a la clase y lo hacemos antes del constructor:
private MessageBoxButtons tipoDeBoton = MessageBoxButtons.OK;
5.19

Captulo 5: Windows Forms

Luego insertemos el siguiente cdigo para el mtodo tipoDeBoton_CheckedChanged


private void tipoDeBoton_CheckedChanged(object sender, EventArgs e)
{
if (sender == radioButton1)
tipoDeBoton = MessageBoxButtons.OK;
else if (sender == radioButton2)
tipoDeBoton = MessageBoxButtons.OKCancel;
else if (sender == radioButton3)
tipoDeBoton = MessageBoxButtons.YesNo;
else if (sender == radioButton4)
tipoDeBoton = MessageBoxButtons.YesNoCancel;
else if (sender == radioButton5)
tipoDeBoton = MessageBoxButtons.RetryCancel;
else
tipoDeBoton = MessageBoxButtons.AbortRetryIgnore;

En el cdigo anterior se investiga cual de los radioButtons (mediante sender) cambi su


estatus de desactivado a activado y se pone la variable tipoDeBoton con uno de los 6 posibles
valores que tiene la enumeracin MessageBoxButtons.
Ahora programemos el evento de que se genere un cambio en la seleccin de los botones de la
derecha es decir en Tipo de Icono, teniendo seleccionado el radioButton7 con etiqueta
Information, hagamos clic en el botn que tiene un rayo en la ventana de propiedades (para
seleccionar eventos) y seleccionemos CheckedChange, a la derecha escribamos como nombre
para el mtodo que se va a ejecutar cuando este evento se lleve a cabo,
tipoDeIcono_CheckedChanged, hagamos lo mismo para los tres radioButtons restantes
seleccionando siempre el mismo mtodo.

5.20

Captulo 5: Windows Forms

Lo que sigue es agregar una variable privada a la clase y lo hacemos tambin antes del
constructor:
private MessageBoxIcon tipoDeIcono = MessageBoxIcon.Error;
Luego insertemos el siguiente cdigo para el mtodo tipoDeIcono_CheckedChanged
private void tipoDeIcono_CheckedChanged(object sender, EventArgs e)
{
if (sender == radioButton7) // display error icon
tipoDeIcono = MessageBoxIcon.Information;
else if (sender == radioButton8)
tipoDeIcono = MessageBoxIcon.Exclamation;
else if (sender == radioButton9)
tipoDeIcono = MessageBoxIcon.Question;
else // only one option left--display question mark
tipoDeIcono = MessageBoxIcon.Error;
}
Como en el primer mtodo, se investiga cual de los radioButtons (mediante sender) cambi su
estatus de desactivado a activado y se pone la variable tipoDeIcono con uno de los cuatro
posibles valores que tiene la enumeracin MessageBoxIcon.
Por ltimo queremos programar el botn Mostrar para que al hacer clic sobre l se ejecute el
mtodo button1_Click desplegando el MessageBox configurado con el valor que en su
momento tengan las variables tipoDeBoton y tipoDeIcono.
private void button1_Click(object sender, EventArgs e)
{
DialogResult result =
MessageBox.Show("Mensaje a desplegar",
"Ttulo de la Ventana",
5.21

Captulo 5: Windows Forms

tipoDeBoton,
tipoDeIcono);
switch
{
case
case
case
case
case
case
case
}

(result)
DialogResult.OK: label2.Text = "Seleccion OK."; break;
DialogResult.Cancel: label2.Text = "Seleccion Cancel."; break;
DialogResult.Yes: label2.Text = "Seleccion Yes."; break;
DialogResult.No: label2.Text = "Seleccion No."; break;
DialogResult.Ignore: label2.Text = "Seleccion Ignore."; break;
DialogResult.Abort: label2.Text = "Seleccion Abort."; break;
DialogResult.Retry: label2.Text = "Seleccion Retry."; break;

}
El cdigo fuente completo de nuestro proyecto puede consultarse en el apndice 5: Caja de
Mensajes -- Form1.cs
A continuacin dos ejecuciones de nuestro programa:

5.22

Captulo 5: Windows Forms

Caja de Seleccin
Ahora crearemos un nuevo proyecto C# del tipo de Aplicacin de Windows Forms, al que
llamaremos CajadeSeleccion.
A la forma principal Form1 agreguemos los siguientes controles:
4 Etiquetas (Label)
12 Cajas de seleccin (CheckBox)
2 Botones (Button)

En la etiqueta uno escribimos el texto UACM POO en C#, las otras tres etiquetas las
utilizaremos para colocar los ttulos Estilo, Fuente, Tamao, las doce cajas de seleccin
nos ayudaran a modificar el texto de la etiqueta uno en cuanto al tipo de letra, tamao y estilo,
el botn Salir cierra la aplicacin y el botn Limpiar, regresa al texto original sin aplicar
ningn formato.
En la siguiente figura observamos como quedara el diseo de la forma:

A continuacin, a los eventos CheckedChanged de cada una de las cajas de seleccin


agreguemos un mtodo pulsando con el mouse a la derecha del evento que queremos
programar.

5.23

Captulo 5: Windows Forms

Este sera el cdigo del mtodo para cambiar el texto de la etiqueta uno a negrita:
private void Negrita_CheckedChanged(object sender, EventArgs e)
{
this.label1.Font = new Font(this.label1.Font.FontFamily,
this.label1.Font.Size, this.label1.Font.Style ^ FontStyle.Bold);
}
Repetimos el mismo paso para crear otros tres mtodos para cambiar al estilo itlica, tachado o
subrayado, lo que harn estos mtodos es cambiar la fuente de la etiqueta label1 para que el
estilo cambie a Bold o Italic o Strikeout o Underline
El principio que estamos usando aqu es el hecho de que para crear una Fuente hay que
hacerlo de la siguiente manera
new Font(FontFamily family, float emSize, FontStyle style);
donde FontFamily es una familia de fuentes como por ejemplo Arial o Consolas y
FontStyle puede ser Bold, Italic, Strikeout, Underline o la combinacin de ellos, el
tamao se pude especificar con un nmero por ejemplo 10, 12, 20.
Para cambiar el tipo de fuente de la etiqueta nuevamente al evento CheckedChanged de cada
una de las cuatro cajas de seleccin agreguemos un mtodo pulsando con el mouse a la
derecha del evento que queremos y escribimos el siguiente cdigo:
private void Consolas_CheckedChanged(object sender, EventArgs e)
{
FontFamily csl = new FontFamily("Consolas");
this.label1.Font = new Font(csl, this.label1.Font.Size,
this.label1.Font.Style);
}
5.24

Captulo 5: Windows Forms

csl es el nuevo tipo de fuente que creamos puede llamarse como queramos respetando la
reglas de identificadores vlidos, entre comillas en color rojo aparece "Consolas" aqu
debemos seleccionar un tipo de fuente vlido podemos ver la ventana de propiedades cuando
cambiamos la fuente los tipos disponibles o tambin en el procesador de texto Word de Office
los tipos de fuentes, realizamos lo mismo para los otros tres tipos de fuentes.
Finalmente en la ltima columna con las cuatro cajas de seleccin cambiamos el tamao del
texto de la etiqueta uno con un procedimiento similar a los dos anteriores primero configurando
el evento y despus escribiendo en el mtodo lo siguiente:
private void Ocho_CheckedChanged(object sender, EventArgs e)
{ this.label1.Font = new Font(this.label1.Font.FontFamily, 8,
this.label1.Font.Style);
}

Observemos que nuevamente aqu de los tres parmetros o argumentos solo modificamos el
tamao.
En cuanto a los botones el botn salir solo agregamos el cdigo: Close();
private void button1_Click(object sender, EventArgs e)
{
Close();
}
El botn limpiar regresa el texto de la etiqueta uno al formato original, por ejemplo si
cambiamos el tipo de letra a Broadway, Tachado y tamao 20, al darle limpiar simplemente
regresamos al texto con el formato original para saber cul era el formato original
seleccionamos la etiqueta uno y en propiedades vemos el tipo de letra y tamao utilizado.
private void button2_Click(object sender, EventArgs e)
{
FontFamily mss = new FontFamily("Microsoft Sans Serif");
this.label1.Font = new Font(mss, 12, FontStyle.Regular);
}
Si observamos aqu para cambiar el estilo del texto utilizamos simplemente
FontStyle.Regular, por otro lado en las cajas de seleccin escribimos
this.label1.Font.Style ^ FontStyle.Bold, esto se debe a que si utilizamos la forma
ms simple es decir FontStyle.Bold, solo lo efectuara una vez y despus ya no lo
cambiara debido a que no especificamos a que control deseamos aplicar el cambio.

5.25

Captulo 5: Windows Forms

El cdigo fuente completo de nuestro proyecto puede consultarse en el apndice 5: Cajade


Seleccin -- Form1.cs
Un ejemplo de la ejecucin del programa sera el siguiente:

Visor de Imgenes y Enlaces


Este proyecto abarca dos secciones, en la primera se trata de un visor de imgenes, es una
aplicacin muy simple que lee archivos grficos, el botn Elegir Imagen en combinacin con
el control openFileDialog nos permite seleccionar la ubicacin de nuestra imagen, una vez
seleccionada la imagen se mostrara en el recuadro pictureBox1. La segunda parte son los
enlaces a tres elementos el primero abre la calculadora de Windows, la segunda abre una liga
a la pgina de la Universidad, por ltimo abre el Explorador de Windows en el disco local C:\,
esto se logra mediante los controles linkLabel.
La siguiente figura muestra los controles necesarios para elaborar nuestro proyecto

5.26

Captulo 5: Windows Forms

Noten que el control openFileDialog1 no aparece dentro de la forma si no en la parte inferior


de nuestro proyecto.,
Los controles necesarios para llevar a cabo el proyecto son:
1 Caja de Imagen (pictureBox)
1 Caja de dialogo para abrir un archivo (openFileDialog)
2 Botones (Button)
3 Etiquetas de Enlace (linkLabel)

Al botn 1 que dice Elegir Imagen al darle doble clic nos traslada al cdigo e insertamos lo
siguiente:
private void button1_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{ // Carga la imagen dentro del cuadro picture box.
pictureBox1.Image= Image.FromFile(openFileDialog1.FileName);
// Muestra el nombre del archivo en el titulo de forma
5.27

Captulo 5: Windows Forms

this.Text = string.Concat("Visor de Imagenes(" + openFileDialog1.FileName


+ ")"); }
}
Un ejemplo de la ejecucin del proyecto con esta primera parte del Visor de Imgenes:

En la segunda parte del proyecto se refiere a los Enlaces, usamos el control linkLabel el cual
tiene la peculiaridad de poseer una liga (como las pginas Web) a directorios de nuestro
sistema de archivos, a direcciones electrnicas de sitios Web o FTP y tambin a aplicaciones
que se encuentren en el Registro de Windows.
Ya tenemos agregados los tres linkLabel, ahora necesitamos la programacin de los eventos
de hacer click en el control, en los tres eventos utilizaremos la llamada del mtodo:
System.Diagnostics.Process.Start(parametros);

En donde los parametros pueden ser:


o
o

Una cadena de caracteres con el nombre de un directorio ejemplo. "C:\\Documents and


Settings\\users\\avalera"
Una cadena de caracteres con el nombre de un programa Navegador de Internet y una
segunda cadena con una direccin electrnica ejemplo. "http://google.com" que se
quiere visitar

5.28

Captulo 5: Windows Forms

Una cadena de caracteres con el nombre de un programa que se quiere mandar


ejecutar

En cada una de las etiquetas de enlace insertamos el siguiente cdigo:


private void linkLabel1_LinkClicked(object sender,
LinkLabelLinkClickedEventArgs e)
{
linkLabel1.LinkVisited = true;
System.Diagnostics.Process.Start("Calc");
}
private void linkLabel2_LinkClicked(object sender,
LinkLabelLinkClickedEventArgs e)
{
linkLabel2.LinkVisited = true;
System.Diagnostics.Process.Start("IExplore",
"http://www.uacm.edu.mx");
}
private void linkLabel3_LinkClicked(object sender,
LinkLabelLinkClickedEventArgs e)
{
linkLabel3.LinkVisited = true;
System.Diagnostics.Process.Start("C:\\");
}
Observemos que normalmente no cambiamos el nombre de los controles por ejemplo aqu
utilizamos el nombre por default linkLabel1, linkLabel2, linkLabel3, esto digamos que
es por simplicidad, aunque si quisiramos que fuera mas intuitivo nuestro programa
podramos llamar en lugar de linkLabel1, quizs calculadora, o en lugar de linkLabel2 el
nombre de uacm, etc.
La ejecucin de esta segunda parte del proyecto abrir las siguientes aplicaciones:

5.29

Captulo 5: Windows Forms

Web Browser y Creacin de Mens


En la siguiente aplicacin vamos a crear un Web Browser dentro de la misma forma,
insertaremos algunas direcciones para seleccionar por cual navegar y mediante un men nos
trasladaremos a la pgina principal, atrs o adelante, funciones bsicas que cualquier
navegador tiene incorporadas, para lograr tal fin incorporaremos los siguientes controles:
1 Men (menuStrip)
1 Caja del tipo combo (comboBox)
2 Botones (Button)
1 Navegador Web (webBrowser)

Noten que el control menuStrip1 no aparece dentro de la forma si no en la parte inferior de


nuestro proyecto, aqu por cuestiones de espacio se muestra del lado derecho.
Veamos los pasos a seguir para crear el proyecto en primer lugar
insertemos el control menuStrip, Cuando liberemos el control de
men, veremos que crea un men por defecto en la parte superior que
nos mostrara un cuadro que muestra Escriba Aqu, introducir el
nombre del men; en este caso, Navegar. Cuando presionamos
entrar o enter, aparecen nuevos cuadros vacos para crear otros
mens y elementos de men. En el cuadro inferior, teclear Home. Presionar enter, y se
mostrarn ms cuadros. Teclear Adelante. Presionar enter, y teclear Atras. Estos elementos
de men constituyen nuestros controles bsicos de navegacin de sitios Web.

5.30

Captulo 5: Windows Forms

Como segundo paso vamos agregar el comboBox y llenarlo, un ComboBox provee una lista
desplegable de opciones que el usuario puede seleccionar. En este programa, el ComboBox
contendr una lista de nuestros sitios Web favoritos para tener un rpido acceso. Para crear la
lista de sitios, seleccionar el ComboBox y visualizar sus propiedades. Hacer clic en la columna
junto a la propiedad Items, y aparecer Coleccin y adelante un cuadro con puntos
suspensivos hacer clic en ese botn para editar el contenido del ComboBox. Aadir tantas ligas
de sitios Web como se desee, presionando enter tras introducir cada una de ellas.

Insertamos dos botones uno que seleccionara el link o enlace al cual queremos ir y el segundo
para salir del programa, luego vamos a insertar el control webBrowser y ajustarlo al tamao
adecuado.
Ahora ya hemos finalizado la fase de diseo de nuestra aplicacin, y hemos llegado al punto
donde necesitamos aadir algn cdigo en C# para proporcionar la funcionalidad del programa.
Necesitamos aadir controladores para el botn y para cada opcin de men. Un controlador
es un mtodo que se ejecuta cuando se activa un determinado control. Visual C# Express crea
controladores vacos para nosotros automticamente. Hacer doble clic sobre el botn, y
aparecer el editor de cdigo para nuestro proyecto. Veremos que el controlador para el evento
asociado al evento de mensaje que sucede cuando el usuario hace clic sobre un botn ha sido
creado por nosotros. Aadir cdigo al mtodo del controlador de modo que tenga una
apariencia similar al ejemplo siguiente.
private void button1_Click(object sender, EventArgs e)
{
webBrowser1.Navigate(comboBox1.SelectedItem.ToString());
}

5.31

Captulo 5: Windows Forms

Este cdigo toma el elemento del control ComboBox que est seleccionado, una cadena que
contiene una URL Web, y lo pasa al mtodo de navegacin del navegador Web. El mtodo de
navegacin carga y visualiza el contenido de una pgina Web en esa ubicacin.
Vamos a aadir el cdigo para las opciones del men, (volver a la ventana de diseo o
diseador presionar Shift + F7 y para ir al cdigo insertar F7), hacer doble clic sobre cada
uno de los elementos de men. Visual C# Express crea mtodos de controladores para cada
uno. Editar estos mtodos de modo que tengan una apariencia similar al cdigo siguiente.
private void homeToolStripMenuItem_Click(object sender, EventArgs e)
{ // Opcin del Men Home o Pgina Principal
webBrowser1.GoHome();
}
private void adelanteToolStripMenuItem_Click(object sender, EventArgs
{ // Opcin del Men Adelante
webBrowser1.GoForward();
}
private void atrasToolStripMenuItem_Click(object sender, EventArgs e)
{
// Opcin del Men Atras
webBrowser1.GoBack();
}
La ltima tarea es aadir cdigo de inicializacin al mtodo Form1. Este mtodo es el
constructor para el objeto Form1 y se invoca cuando se crea el Windows Form. Es, por tanto, la
ubicacin ideal para situar cualquier cdigo que se requiera para cambiar los valores iniciales
de los controles u otras configuraciones. El siguiente cdigo provocar que el control Web
Browser visualice la pgina de inicio por defecto en nuestro ordenador, y tambin establecer
el valor inicial del ComboBox. Cambiar el mtodo para que contenga el siguiente cdigo:
public Form1()
{
InitializeComponent();
comboBox1.SelectedIndex = 0;
webBrowser1.GoHome();
}
El cdigo fuente completo de nuestro proyecto puede consultarse en el apndice 5:
WebBrowser_Menus -- Form1.cs
Un ejemplo de la ejecucin del proyecto:

5.32

Captulo 5: Windows Forms

Formas que llaman a otras formas


Vamos a crear tres Formas (Clases) Form1, Form2 y Form3, y la idea es que Form1 pueda
llamar mediante respectivos botones a Form2 o Form3. Tanto Form2 como Form3 son dos
Formas del tipo modal (mientras que no se cierren no puede accederse a otra parte del
programa).
Una vez que la aplicacin quede terminada lucir semejante a la que se muestra a
continuacin:

5.33

Captulo 5: Windows Forms

Una vez llena la forma de captura Form3, la informacin es pasada a Form1, en la forma 3
tenemos 5 campos a llenar, Calle, Colonia, Delegacin, Cdigo Postal y Telfono, una vez
que llenamos estos datos y damos clic al botn OK, automticamente los datos los copia a la
forma 1, a las etiquetas label2, label3, label4, label5 y label6, respectivamente.
Podemos dejar en blanco el campo Text de estas 5 etiquetas, para ilustra estos controles
aparecen en el proyecto. Este es un ejemplo de la ejecucin:

5.34

Captulo 5: Windows Forms

En la Forma 1 vamos a ingresar:


6 Etiquetas (Label)
1 Caja de texto (textBox)
2 Botones (Button)
En el Explorador de Soluciones haciendo clic derecho en el nombre del proyecto, vamos a
insertar la forma 2 y 3.

En la Forma 2 vamos a ingresar:


2 Etiquetas (Label)
1 Botn (Button)
En la Forma 3 vamos a ingresar:
6 Etiquetas (Label)
5 Caja de texto (textBox)
1 Botn (Button)

5.35

Captulo 5: Windows Forms

Creacin de Propiedades en una Clase


Cuando en una clase est declarado un campo (variable) privado por ejemplo Informacion
del tipo string (vase el siguiente segmento de cdigo), la manera para acceder a l es
mediante mtodos pblicos de la clase o a travs de la declaracin de una propiedad
relacionada con l.
En C# la manera de declarar una propiedad info para darle un valor al campo Informacion
(set) o para poder leer el contenido de ste (get) es la siguiente:
private string Informacion;
public string info
{
set
// para escritura
{
Informacion = value;
}
get
// para lectura
{
return Informacion;
}
}
Para nuestra Clase Form3 creremos 6 propiedades:
public string Nombre
{
set
{
label1.Text = value;
}
}
public string Calle
{
get
{
return textBox1.Text;
}
}
public string Colonia
{
get
{
return textBox2.Text;
}
}
5.36

Captulo 5: Windows Forms

public string Delegacin


{
get
{
return textBox3.Text;
}
}
public string CdigoPostal
{
get
{
return textBox4.Text;
}
}
public string Telfono
{
get
{
return textBox5.Text;
}
}
private void button1_Click(object sender, EventArgs e)
{
Close();
}
El Mtodo para los dos botones de Form1
A continuacin se muestra el cdigo que debemos ingresar a los dos mtodos del botn
Ingresar Datos y Acerca de..., anteriormente creado para Form1.
private void button1_Click(object sender, EventArgs e)
{
Form2 acercaDe = new Form2();
acercaDe.ShowDialog();
}
private void button2_Click(object sender, EventArgs e)
{
Form3 data = new Form3();
data.Nombre = textBox1.Text;
data.ShowDialog();
label2.Text = "Calle: " + data.Calle;
label3.Text = "Colonia: " + data.Colonia;
label4.Text = "Delegacin: " + data.Delegacin;
label5.Text = "Cdigo Postal " + data.CdigoPostal;
5.37

Captulo 5: Windows Forms

label6.Text = "Cdigo Postal " + data.Telfono;


}
El cdigo fuente completo de nuestro proyecto puede consultarse en el apndice 5:
llamarFormas -- Form1.cs
Form2.cs
Form3.cs

Matrices en dataGridView
El control DataGridView proporciona una tabla personalizable para mostrar datos. La clase
DataGridView permite personalizar celdas, filas, columnas y bordes mediante propiedades.
El siguiente proyecto suma dos matrices cuadradas de NxN, consta de 3 dataGridViews en
primer lugar se le asignan columnas y filas segn el tamao que le asignemos a la matriz por
default, as como dos botones los cuales uno es para calcular el tamao de la matriz y rellenar
los valores aleatorios dentro del grid, y el segundo botn nos sirve para calcular la suma de las
dos matrices. Podemos modificar los valores de nuestros grids, y volver a sumar, para obtener
la matriz resultante.
Controles utilizados:
4 Etiquetas (Label)
3 Grid (dataGridView)
2 Botones (Button)
1 Caja de texto (textBox)
El proyecto en vista del diseador tendr la siguiente apariencia:

Al botn Generar Matriz se le insertara el siguiente cdigo:


5.38

Captulo 5: Windows Forms

private void button1_Click(object sender, EventArgs e)


{
dataGridView1.Columns.Clear();
dataGridView2.Columns.Clear();
dataGridView3.Columns.Clear();
int tam = int.Parse(textBox1.Text);
int i = 1;
while (i <= tam)
{
DataGridViewColumn columna = new DataGridViewColumn(new DataGridViewTextBoxCell());
columna.Width = 25; //ancho
this.dataGridView1.Columns.Add(columna);
DataGridViewColumn columna2 = new DataGridViewColumn(new DataGridViewTextBoxCell());
columna2.Width = 25;
this.dataGridView2.Columns.Add(columna2);
DataGridViewColumn columna3 = new DataGridViewColumn(new DataGridViewTextBoxCell());
columna3.Width = 25;
this.dataGridView3.Columns.Add(columna3);
i++;
}
int[,] _matriz1 = new int[tam, tam]; // se declaran variables de tipo matriz
int[,] _matriz2 = new int[tam, tam];
int[,] _matriz3 = new int[tam, tam];
dataGridView1.Rows.Add(tam);
dataGridView2.Rows.Add(tam);
dataGridView3.Rows.Add(tam);
Random r = new Random();
// genera un dato de manera aleatoria, se utiliza para revolver los datos llena los datos de las casillas
vacias.
for (int f = 0; f < tam; f++)
{
for (int c = 0; c < tam; c++)
{
_matriz1[f, c] = r.Next(10); // valor inicial que agarra valores del 0 al 10
_matriz2[f, c] = r.Next(10);
_matriz3[f, c] = 0;
dataGridView1[f, c].Value = _matriz1[f, c]; // se agrega filas y colmnas
dataGridView2[f, c].Value = _matriz2[f, c];
dataGridView3[f, c].Value = _matriz3[f, c];
}
}
}

Y botn Sumar el cdigo:


private void button2_Click(object sender, EventArgs e)
{
int tam = int.Parse(textBox1.Text);
int[,] _matriz1 = new int[tam, tam];
int[,] _matriz2 = new int[tam, tam];
int[,] _matriz3 = new int[tam, tam];
for (int f = 0; f < tam; f++) // filas
{
for (int c = 0; c < tam; c++) //columnas
{
_matriz1[f, c] = int.Parse(dataGridView1[f, c].Value.ToString()); // almacena
_matriz2[f, c] = int.Parse(dataGridView2[f, c].Value.ToString());
_matriz3[f, c] = _matriz1[f, c] + _matriz2[f, c];
dataGridView3.CurrentCell = dataGridView3[f, c];
dataGridView3.CurrentCell.Value = _matriz3[f, c];
}
}
}

5.39

Captulo 5: Windows Forms

La clase DataGridViewTextBoxCell es un tipo especializado de DataGridViewCell utilizado


para mostrar una nica cadena de informacin basada en texto modificable.
La clase DataGridViewColumn representa una columna lgica de un control DataGridView.
Podemos recuperar las columnas a travs de la coleccin Columns del control.
Al contrario que DataGridViewRow, que contiene la coleccin real de celdas de un control
DataGridView, DataGridViewColumn se utiliza principalmente para ajustar la apariencia y
comportamiento de la interfaz de usuario de la columna, como el ancho de columna y el estilo
de celda.
DataGridView.Rows Es una propiedad que obtiene una coleccin que contiene todas las filas
del control DataGridView.
Del lado izquierdo se muestra la ejecucin cuando damos una dimensin de 5 para nuestra
matriz cuadrada en esta parte cada elemento de la matriz resultante se inicializa en cero, del
lado derecho cuando damos clic en Suma obtenemos el resultado de cada elemento de la
matriz resultante.

Creacin de Mens
El siguiente proyecto muestra la creacin de mens, utilizamos tres etiquetas y mediante las
opciones del men Formato y Fondo, cambiamos el color de fondo, el tipo y color de la fuente
o letra, mediante el men Acerca de mostramos informacin de contacto del autor del
proyecto y la opcin Salir. Como parte complementaria y para no incluirla en un solo proyecto
agregamos el control dateTimePicker y el botn Fecha, esto simplemente muestra un
calendario seleccionamos una fecha y al dar clic en el botn nos muestra la fecha elegida y del
da actual, esto con ayuda de un MessageBox.Show.
5.40

Captulo 5: Windows Forms

La estructura general del proyecto es la siguiente:

Controles utilizados:
3 Etiquetas (Label)
1 Men (menuStrip)
1 DateTimePicker
1 Botn (Button)

Con ingresar un solo menuStrip se pueden derivar todos los mens que necesitemos, en las
siguientes imgenes se muestran cada una de las opciones del men, es importante aclarar
que la opciones que aparecen como Ctrl+N, Ctrl+B, Ctrl+S, no se escriben si no son
accesos rpidos para trabajar con el proyecto por ejemplo con Ctrl+S, sale uno del proyecto,
en la siguiente pantalla se muestra como se configura esta propiedad.

5.41

Captulo 5: Windows Forms

En las siguientes figuras se muestra a detalle cada una de las opciones del men:

El cdigo del botn fecha nos da la informacin de la fecha seleccionada y el da actual junto
con la hora, su cdigo es:
private void button1_Click(object sender, EventArgs e)
{
// Muestra la fecha seleccionada:
MessageBox.Show("Has seleccionado la fecha: " +
dateTimePicker1.Value.Date);
// Muestra la fecha de hoy:
MessageBox.Show("Hoy es: " + DateTime.Now);
}

5.42

Captulo 5: Windows Forms

Por razones de espacio el cdigo de cada men puede consultarse en el apndice 5:


menuCalendario -- Form1.cs

Ejemplo de la ejecucin del proyecto:

5.43

Captulo 5: Windows Forms

También podría gustarte