.NET
Mtodos
Conceptos de mtodos
Mtodos
Definicin de un mtodo
Para definir un mtodo hay que indicar tanto cules son las
instrucciones que forman su cuerpo como cul es el nombre que se le
dar, cul es el tipo de objeto que puede devolver y cules son los
parmetros que puede tomar.
<cuerpo>
Int Saluda ()
Console.WriteLine(Hola Mundo)
Return 1;
Mtodos
Llamadas a un mtodo
<objeto>.<nombreMtodo>(<valoresParmetros>)
<tipo>.<nombreMtodo>(<valoresParmetros>)
Mtodos
Sobrecarga de mtodos
{...}
{...}
Mtodos
Sobrecarga de mtodos
{...}
{...}
{...}
Ojo
{...}
Mtodos
Tipos de parmetros
parmetros de entrada.
parmetros de salida.
Mtodos
Parmetros de entrada
Ejemplo:
Return par1+par2;
Mtodos
Parmetros de entrada
Mtodos
Parmetros de entrada
Mtodos
Parmetros de Salida
Mtodos
Parmetros de Salida
Mtodos
Parmetros por referencia
Mtodos
Parmetros de numero indefinido
Mtodos
Sobrecarga de tipos de Parmetros
Mtodos
Sobrecarga de tipos de Parmetros
Mtodos
Mtodos Static
Bien, los mtodos static, son aquellos que se pueden ejecutar sin
necesidad de instanciar la clase donde est escrito. Por lo tanto, el
hecho de que el mtodo Main tenga que ser static no es un capricho, ya
que, de lo contrario, el CLR no sera capaz de encontrarlo pues antes de
que se ejecute la aplicacin, lgicamente, no puede haber instancias de
ninguna de las clases que la componen.
Para hacer que un mtodo sea static hay que poner esta palabra
despus del modificador de acceso (si lo hay) y antes del tipo de retorno
del mtodo.
Mtodos
Nivel de acceso
Todos los tipos y miembros de tipo tienen un nivel de accesibilidad, que controla si pueden
utilizarse por otro cdigo de su ensamblado u otros ensamblados.
Puede utilizar los modificadores de acceso siguientes para especificar la accesibilidad de un tipo
o miembro al declararlo:
Public: Puede obtener acceso al tipo o miembro cualquier otro cdigo del mismo ensamblado o
de otro ensamblado que haga referencia a ste.
Private: Solamente puede obtener acceso al tipo o miembro cdigo de la misma clase o struct.
Protected: Solamente puede obtener acceso al tipo o miembro el cdigo de la misma clase o
struct, o bien de una clase derivada de dicha clase.
Internal: Puede obtener acceso al tipo o miembro cualquier cdigo del mismo ensamblado, pero
no de un ensamblado distinto.
protected internal: Puede obtener acceso al tipo o miembro cualquier cdigo del ensamblado en
el que se declara, o bien desde una clase derivada de otro ensamblado. El acceso desde otro
ensamblado debe realizarse dentro de una declaracin de clase derivada de la clase en la que se
declara el elemento interno protegido y a travs de una instancia del tipo de clase derivada.
Windows Forms
La clase Application
Windows Forms
El formulario
Windows Forms
Ventana Principal
MUCHAS GRACIAS
Ejercicios de Consola
Ejercicio01
Vamos a construir una clase Bolgrafo; sus mtodos sern, por ejemplo, Pintar y Recargar,
que son las operaciones que se suelen efectuar con un bolgrafo. Ambos mtodos modificarn
la cantidad de tinta del boli, valor que podramos poner en una propiedad llamada Tinta, por
ejemplo. Para aquellos que conozcis la programacin procedimental, un mtodo es como un
procedimiento o una funcin.
En determinadas ocasiones necesitaremos pasarle datos a los mtodos para que estos puedan
hacer su trabajo. Por ejemplo, siguiendo con el bolgrafo, puede que necesitemos decirle al
mtodo Pintar la cantidad de tinta que vamos a gastar. Pues bien, estos datos se llaman
argumentos.
Los mtodos tambin pueden devolver un valor despus de su ejecucin si fuera necesario.
En este ejemplo, el mtodo Pintar devuelve True si la operacin se ha podido efectuar y False
si no se ha podido (fjate en que el tipo de retorno es bool). De este modo, el cliente
simplemente debera fijarse en el valor devuelto por el mtodo para saber si todo ha
funcionado correctamente, sin tener que comparar los datos de antes con los de despus (es
decir, sin comprobar si el valor de la propiedad tinta, en este caso, se ha visto modificado).
class Ejercicio01
{
protected int color = 0;
protected byte tinta = 100;
public bool Pintar(byte gasto)
{
if (gasto > this.tinta) return false;
this.tinta -= gasto;
Console.WriteLine("Se gastaron {0} unidades de tinta.", gasto);
return true;
}
public void Recargar()
{
this.tinta = 100;
Console.WriteLine("Bolgrafo recargado");
}
public int Color
{
get
{
return this.color;
}
set
{
this.color = value;
}
}
public byte Tinta
{
get
{
return this.tinta;
}
}
public static void Main()
{
// Instanciacin del objeto
Ejercicio01 boli = new Ejercicio01();
Console.WriteLine("El boli tiene {0} unidades de tinta", boli.Tinta);
Console.WriteLine("boli.Pintar(50) devuelve {0}", boli.Pintar(50));
Console.WriteLine("Al boli le quedan {0} unidades de tinta", boli.Tinta);
Console.WriteLine("boli.Pintar(60) devuelve {0}", boli.Pintar(60));
Console.WriteLine("Al boli le quedan {0} unidades de tinta", boli.Tinta);
boli.Recargar();
Console.WriteLine("Al boli le quedan {0} unidades de tinta", boli.Tinta);
string a = Console.ReadLine();
}
}
Examinemos el cdigo y el resultado un momento. En primer lugar, como ves, instanciamos
el objeto boli con el operador new y escribimos la cantidad de tinta del mismo en la consola.
Efectivamente, Tinta vale 100 porque la variable protected que almacena este valor (la
variable tinta) est inicializada a 100 en la declaracin. A continuacin, en el mtodo Main,
se pretende escribir lo que devuelva el mtodo Pintar. Sin embargo, como ves, antes de eso
aparece en la consola otra lnea, la que escribe precisamente este mtodo (Pintar). Por qu
sale primero esto y despus lo que est escrito en el mtodo Main? Pues hombre, para que el
mtodo devuelva algo se tiene que haber ejecutado primero. Lgico, no? Bien, como ves, la
primera llamada al mtodo Pintar devuelve True porque haba tinta suficiente para hacerlo.
Despus se escribe la tinta que queda y se vuelve a llamar al mtodo Pintar, pero esta vez le
pasamos como argumento un nmero mayor que la tinta que quedaba. Por este motivo, ahora
el mtodo pintar devuelve False y no escribe nada en la consola. Posteriormente se ejecuta el
mtodo Recargar, que no devuelve nada y escribe "Bolgrafo recargado" en la consola, y, por
ltimo, se vuelve a escribir la cantidad de tinta, que vuelve a ser 100. De todo esto podemos
extraer dos ideas principales con las que quiero que te quedes de momento: una es que los
mtodos pueden devolver un valor de cualquier tipo, y la otra es que si un mtodo no
devuelve nada hay que declararlo de tipo void.
Ejercicio02
using System;
namespace VisaElectron
{
class Ejercicio02
{
public static ushort Limite()
{
return 300;
}
// Aqu iran ms miembros de la clase
public static void Main()
{
Console.WriteLine("El lmite de la Visa electrn es: {0}", Ejercicio02.Limite());
string a=Console.ReadLine();
}
}
}
Para hacer que un mtodo sea static hay que poner esta palabra despus del modificador de
acceso (si lo hay) y antes del tipo de retorno del mtodo. Este mtodo devolvera el lmite
que tienen todas las tarjetas Visa Electrn para extraer dinero en un slo da. Ahora presta
especial atencin a cmo se invoca este mtodo dentro del mtodo Main (est en negrilla).
En efecto, no se ha instanciado ningn objeto de la clase VisaElectron, sino que se ha puesto
directamente el nombre de la clase.
Ejercicios Windows Forms
Ejercicio01
En el siguiente ejemplo vamos a mostrar una ventana totalmente autnoma, cuyo
comportamiento es idntico al de cualquier otra ventana que el lector conoce en otros
using System.Windows.Forms;
public class Ejercicio01
{
public static void Main()
{
Form ventana = new Form();
ventana.Text = "Hola ventana...!";
ventana.Visible = true;
Application.Run(ventana);
}
}
Ejercicio 02
El programa que viene a continuacin crea dos ventanas y las muestra en pantalla. Una de
ellas se muestra a travs de la propiedad Visible, y la otra lo hace automticamente al
asignarse como parmetro del mtodo Run.
using System.Windows.Forms;
public class Ejercicio02
{
public static void Main()
{
Form formPrincipal = new Form();
Form formVentana = new Form();
formVentana.Visible = true;
formVentana.Text = "formVentana";
formPrincipal.Text = "formPrincipal";
Application.Run(formPrincipal);
}
}
Ejercicio 03
El siguiente programa muestra dos eventos que han sido controlados para mostrar un mensaje
en pantalla. El evento Load que se genera cada que se est iniciando el proceso de carga de
una ventana y el evento Click que se genera al hacer clic con el botn principal del ratn
sobre la ventana.
using System.Windows.Forms;
public class Ejercicio03
{
static void Main()
{
Form formVentana = new Form();
formVentana.Load += new EventHandler(FormVentanaLoad);
formVentana.Click += new EventHandler(FormVentanaClick);
formVentana.Text = "Ventana";
Application.Run(formVentana);
}
static void FormVentanaLoad(object emisor, EventArgs e)
{
MessageBox.Show("Cargando...", "Load");
}
static void FormVentanaClick(object emisor, EventArgs e)
{
MessageBox.Show("Clic...", "Click");
}
}
Ejercicio 04
A continuacin se muestra un programa formado por una ventana que contiene un botn
etiquetado con Aceptar. El programa hace una implementacin del evento Click del botn.
using System.Windows.Forms;
public class Ejercicio04
{
public static void Main()
{
Form formVentana = new Form();
Button buttonAceptar = new Button();
// Botn Aceptar
buttonAceptar.Click += new EventHandler(ButtonAceptarClick);
buttonAceptar.Text = "Aceptar";
buttonAceptar.Left = 100;
buttonAceptar.Top = 150;
// Configurar la ventana
formVentana.Text = "Ventana";
formVentana.Visible = true;
// Agregar un control a la ventana
formVentana.Controls.Add(buttonAceptar);
Ejercicio05
El programa de este ejemplo muestra cuatro botones de comando que generan el evento Click
y este es controlado por un nico evento. Esta es una buena forma de programar un conjunto
de controles que realizan tareas muy similares.
Se ha implementado el controlador del evento Click de los cuatro botones mediante el
mtodo:
static void ButtonOperar(object emisor, EventArgs e)
{
Button buttonEmisor = (Button)emisor;
MessageBox.Show(buttonEmisor.Text);
}
Sabemos que el primer parmetro del mtodo establece quin ha sido el objeto que ha
generado el evento. En este caso se identifica mediante el ttulo del botn, pero para poder
leer este ttulo es necesario hacer una conversin de tipos, o cast, al objeto emisor,
convirtindolo al tipo Button.
using System.Windows.Forms;
public class Ejercicio05
{
public static void Main()
{
Form formVentana = new Form();
Button buttonSumar = new Button();
buttonSumar.Click += new EventHandler(ButtonOperar);
buttonSumar.Text = "Sumar";
buttonSumar.Left = 50;
buttonSumar.Top = 100;
formVentana.Controls.Add(buttonSumar);
Button buttonRestar = new Button();
buttonRestar.Click += new EventHandler(ButtonOperar);
buttonRestar.Text = "Restar";
buttonRestar.Left = 175;
buttonRestar.Top = 100;
formVentana.Controls.Add(buttonRestar);
Button buttonMultiplicar = new Button();
buttonMultiplicar.Click += new EventHandler(ButtonOperar);
buttonMultiplicar.Text = "Multiplicar";
buttonMultiplicar.Left = 50;
buttonMultiplicar.Top = 150;
formVentana.Controls.Add(buttonMultiplicar);
Button buttonDividir = new Button();
buttonDividir.Click += new EventHandler(ButtonOperar);
buttonDividir.Text = "Dividir";
buttonDividir.Left = 175;
buttonDividir.Top = 150;
formVentana.Controls.Add(buttonDividir);
Application.Run(formVentana);
}
static void ButtonOperar(object emisor, EventArgs e)
{
Button buttonEmisor = (Button)emisor;
MessageBox.Show(buttonEmisor.Text);
}
}
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
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
5.3
Creacin de Proyectos
Para abrir Visual C# Express Edition 2008 ejecutamos el programa directamente o con los
acceso directos.
5.4
En el cuadro de herramientas
tenemos tres opciones desde
cerrar para desaparecer el
cuadro, ocultar automticamente
o colocarla flotante, acoplable,
etc.
5.5
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
5.7
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.
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
Las figuras siguientes muestran ambas formas antes y despus de ser modificadas.
5.9
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
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.
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.
5.11
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);
}
5.12
5.13
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.
5.14
5.15
5.16
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
2 Etiquetas (Label)
1 Botn (Button)
5.17
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
5.18
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
5.20
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
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
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:
5.23
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
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
5.26
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
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);
5.28
5.29
5.30
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
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
5.33
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
5.35
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:
5.39
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
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
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
5.43