Sei sulla pagina 1di 18

Captulo 6

ELEMENTOS DE INTERFAZ GRAFICA WindowsForms


Los programas de computador modernos, al menos en un alto porcentaje, a los que se enfrenta el usuario se caracterizan por un aspecto en comn: ponen a su disposicin una o varias ventanas que le permiten recibir o mostrar los datos que se procesan en el computador. Est caracterstica es la que ha permitido que ms personas vean al computador como una herramienta de trabajo casi indispensable en ms y ms tareas que deben realizar en su vida cotidiana, sacndolo del uso exclusivo de unos pocos y llevndolo a formar parte de la vida misma de los habitantes del siglo XXI. Pero, lo que realmente ha facilitado el uso del computador no han sido las ventanas como tal, sino el diseo de las mismas incluyendo unos elementos bsicos que hoy en da se han convertido en prcticamente un estndar del desarrollo de las interfaces grficas de usuario. Los botones de comando, las cajas de texto, las listas desplegables, las barras de herramientas, las barras de desplazamiento, los mens, y muchos otros elementos son parte indispensable en cualquier programa de computador que el usuario busca le sea til para sus objetivos. Hoy en da al usuario de aplicaciones de software no le interesa en que sistema operativo funcionen estas, y menos en que lenguaje de programacin hayan sido desarrolladas, siempre y cuando pongan a su disposicin los elementos bsicos que l reconoce, de tal manera que le permitan acceder a las funciones en la misma forma como lo hacen desde las aplicaciones ms elementales hasta las ms sofisticadas. Aunque el objetivo esencial de un programa de computador es la funcionalidad que debe prestar al usuario, y no la forma como se haya desarrollado, para los programadores si es de especial cuidado el manejo de los componentes grficos que se van a utilizar, por que un mal uso de estos puede echar por la borda todo el trabajo de ingeniera de software aplicado en el momento de su desarrollo. Sin embargo, dado que la mayora de aplicaciones requieren del uso de un gran nmero de elementos grficos, su manejo en lo que respecta a la programacin puede resultar demasiado complejo y dispendioso al tener que manipular muchos detalles en forma repetitiva y precisa, lo cual consume una gran cantidad de energa y tiempo en esta fase del desarrollo. Por ejemplo, uno de los aspectos que puede resultar ms complejo para un programador es la ubicacin de los componentes en varias ventanas, que le obligan a memorizar diferentes coordenadas o realizar clculos que en la mayora de los casos, aunque importantes en el campo de la presentacin, resultan intrascendentes para la funcionalidad misma del programa que se est desarrollando.

Los entornos de desarrollo integrado


La solucin dada por la informtica moderna, al problema de la programacin con componentes de interfaz grfica, han sido los IDE ( integrated development environment, entornos de desarrollo integrado), que le permiten al programador centrarse en la funcionalidad misma del programa ms que en como hacer funcionar cada pieza que se va a utilizar en su construccin. Estos IDE son programas de computador que ponen a disposicin del programador un conjunto de herramientas de tipo visual que hacen ms rpida la tarea de programacin en cualquier lenguaje. Entre

160

CAPITULO 6 PROGRAMACION CON C#

estas herramientas se destacan los diseadores de interfaces grficas de usuario, que son algo as como plantillas que permiten dibujar y establecer las caractersticas de los componentes grficos utilizando el puntero del ratn, mientras el IDE genera internamente el respectivo cdigo de programacin, y el sistema denominado IntelliSense, que es un ayudante de escritura de cdigo que le evita al programador tener que memorizar una gran cantidad de nombres y palabras clave propias del lenguaje de programacin y del marco de trabajo donde se este desarrollando, haciendo ms rpida la codificacin de los algoritmos.

Figura 6.1: Sistema IntelliSense mostrado por SharpDevelop

Entre los entornos de desarrollo integrado ms populares y exitosos que existen actualmente para la programacin con C# en .NET y Mono, estn Visual Studio .NET, SharpDevelop y MonoDevelop. Visual Studio .NET es un software comercial cuyos costos dependen de la versin que desee adquirir el desarrollador, mientras que SharpDevelop y Monodevelop son OpenSource, y se pueden descargar libremente desde las pginas de sus respectivos desarrolladores. Aunque los IDE son de gran ayuda en el proceso de desarrollo de aplicaciones en cualquier nivel, y le permiten al programador centrarse en el objetivo mismo del programa que est desarrollando, presentan un grave inconveniente, y es que ocultan muchos aspectos importantes de la arquitectura de una aplicacin. En consecuencia el proceso de programacin puede volverse mecnico y muchas veces carente de sentido lgico si no se tiene un fundamento claro de la estructura del lenguaje de programacin y como funciona el framework de desarrollo, para nuestro caso C# y .NET. Esta dificultad es la que hace que muchos programadores se sientan cmodos trabajando con un IDE y un framework determinado, pero les cueste trabajo hacer lo mismo, y con el mismo lenguaje de programacin, en un framework diferente. Adems, el hecho de no tener bien claros los fundamentos, va a complicar mucho la posibilidad de abordar tcnicas avanzadas de programacin y sacar el mximo provecho al trabajo como desarrollador. En este curso de programacin con C#, se utilizar SharpDevelop como entorno de desarrollo, pero no es el objetivo ensear su manejo ni mucho menos su funcionamiento, sino ms bien aprovechar su funcionalidad para hacer ms rpido el trabajo de programacin, liberando al lector de algunas tareas repetitivas. Igual se sugiere que el lector dedique un poco de tiempo a analizar y entender el cdigo generado por el IDE para cada uno de los ejemplos antes de continuar con la lectura. En la tarea de comprender algunos conceptos de programacin y el funcionamiento de los elementos del marco de desarrollo, a veces es mejor desarrollar los ejemplos sin la ayuda de algunos asistentes del IDE. Por ejemplo, en las primeras etapas de la programacin con componentes de interfaz grfica, conexin con bases de datos o procesos relacionados con la impresin o salida de datos, el lector primeramente
www.pedrov.info

CAPITULO 6 ELEMENTOS DE INTERFAZ GRAFICA WINDOWSFORMS

161

debera identificar a plenitud los detalles de bajo nivel relacionados con el cdigo que sustenta tales funciones y luego determinar la validez del uso de los respectivos asistentes. Adems, cuando se ha entendido plenamente la lgica y estructura del lenguaje de programacin, algunos asistentes del IDE pasan a segundo plano y sus funciones se comprenden fcilmente sin necesidad de haberlos estudiado en forma exclusiva.

SharpDevelop
SharpDevelop es un IDE libre desarrollado inicialmente para programar con C#, pero en las ltimas versiones tambin incluye la posibilidad de hacerlo con VB.NET, Boo, F# y Phyton, entre otros, en proyectos que utilizan el marco de trabajo Microsoft. NET o Mono. Y un aspecto que lo hace verdaderamente interesante y til es que se trata de un proyecto de cdigo abierto, y se puede descargar tanto el cdigo fuente como los ejecutables desde la pgina de sus desarrolladores, http://www.icsharpcode.net. Como cualquier otro programa de Windows, se descarga el instalador de SharpDevelop y se instala sin mayores problemas. Las ltimas versiones se ejecutan sobre el Framework 3.0 o superior de .NET, as que se deber tener instalado primero este componente para que las cosas funcionen bien. Adicional, se sugiere descargar el kit de desarrollo de software ( SDK) de Microsoft .NET Framework 2.0 (x86) o superior, desde la pgina de Microsoft, para de esta manera poder contar con la documentacin necesaria de los componentes de .NET, a travs de los comandos de su men Ayuda.

Ventanas del IDE

Figura 6.2: Ventana principal de SharpDevelop, la cual muestra la pgina de inicio con un listado de las soluciones que se han desarrollado.

La primera vez que se ejecuta SharpDevelop el entorno mostrar un listado de las ltimas soluciones desarrolladas y le pedir que se abra una solucin existente o inicie una nueva. Una solucin es un grupo formado por uno o varios proyectos de desarrollo, los cuales pueden ser independientes unos de otros, pero que el programador puede manipularlos para establecer relaciones directas entre ellos
pedrov.cs@hotmail.com

162

CAPITULO 6 PROGRAMACION CON C#

aprovechando las herramientas que le ofrece el entorno de desarrollo. Cada proyecto, a su vez, es el conjunto de elementos que permiten desarrollar un ensamblado y generalmente esta constituido por varios archivos que se guardan en un directorio con el nombre del proyecto. De esta manera, dentro del directorio que define la solucin se ubican uno o varios subdirectorios que corresponden a cada uno de los proyectos que la constituyen. Cuando se inicia una nueva solucin, el entorno muestra el cuadro de dialogo Proyecto nuevo, que le permite al programador establecer el tipo de aplicacin que va a desarrollar, el lenguaje que va a utilizar en su programacin y el framework sobre el cual se va a trabajar. El nombre que se asigne al primer proyecto ser el nombre que asuma la solucin, aunque este valor puede cambiarse en la caja de texto Nombre de la solucin.

Figura 6.3: Cuadro de dialogo Proyecto nuevo que permite definir el proyecto que se va a desarrollar, sus caractersticas y el lenguaje de programacin que se va a utilizar

En el caso del framework .NET, cualquier versin que se encuentre instalada se configura automticamente para ofrecerse como una posibilidad del marco de trabajo que desee seleccionar el programador. Pero no sucede lo mismo, al menos hasta la versin 3.0 de SharpDevelop, con el framework Mono, que debe configurarse manualmente.
Una vez definido el proyecto que se va a desarrollar, se ingresa al entorno de desarrollo que est constituido por un grupo de ventanas y barras de herramientas que buscan ser el ayudante perfecto que el programador va a necesitar en su trabajo. Enseguida revisaremos brevemente el propsito de cada uno de estos elementos, teniendo en cuenta que para mostrar cualquiera de ellos se debe utilizar el men Ver. Tambin se podr abrir muchos de ellos utilizando un acceso directo de teclado o pulsando sobre alguno de los iconos contenidos en la barra de herramientas principal, como se indicar a continuacin.

www.pedrov.info

CAPITULO 6 ELEMENTOS DE INTERFAZ GRAFICA WINDOWSFORMS

163

La ventana de proyectos proporciona informacin de los componentes que conforman la solucin en desarrollo, mostrando los proyectos que la componen y sus respectivos componentes. Cada proyecto est constituido por los ensamblados de referencia que se enlazan para acceder a los componentes de software tanto del framework .NET como de los componentes desarrollados por el mismo programador o por terceros, y por los archivos que guardan el cdigo de programacin, las propiedades y los recursos. Para acceder a esta ventana podr utilizarse el comando Proyectos del men Ver o la combinacin de teclas CTRL+ALT+L.
Ventana de proyectos Barra de herramientas principal Diseador de formularios Ventana de propiedades

Figura 6.3: Entorno de desarrollo de SharpDevelop mostrando algunas de sus ventanas ms importantes

El programador podr utilizar la ventana del diseador de formularios para disear la interfaz de usuario de aquellos proyectos que se basen en estos componentes, utilizando WindowsForms o WebForms, principalmente. Cada proyecto puede estar conformado por uno o ms formularios y para cada uno de ellos existir un diseador de formularios independiente. Basndose en este diseo, el generador de cdigo escribir en un archivo el cdigo necesario para mostrar la ventana tal como la dibuj el programador. Como ya se menciono en el captulo anterior, este diseador de formularios genera una clase para cada formulario y la guarda en dos archivos. En uno de los archivos se almacenar el cdigo que introduzca el programador para hacer funcionar los diferentes componentes y en el otro se
pedrov.cs@hotmail.com

164

CAPITULO 6 PROGRAMACION CON C#

guarda el cdigo que se corresponde con el diseo grfico de la ventana. Este ltimo archivo se nombra con el nombre de la clase seguido de la palabra Designer.

La ventana de herramientas incluye un conjunto de objetos que se podrn introducir en un formulario o en cualquier otro componente grfico para disear la interfaz de usuario del proyecto en desarrollo. Mediante etiquetas se organizan los diferentes componentes grficos que SharpDevelop enlaza automticamente, empezando en aquellos provistos por el framework .NET. Los componentes WindowsForms corresponden a los controles de interfaz grafica estndar que se utilizan en la mayora de aplicaciones. Los componentes Data son controles grficos que permiten realizar la configuracin y el acceso a bases de datos. Los controles incluidos en Components permiten configurar algunas funciones del sistema operativo, tales como pulsos de tiempo, conexin a los puertos, ayudas o envi de mensajes de texto al usuario. Los componentes Printing son controles que permiten generar los procesos de impresin. Y finalmente en la etiqueta Componentes personalizados se incluyen todos aquellos componentes desarrollados por el programador y que no hacen parte del framework .NET. Para acceder a la ventana de herramientas se utiliza el comando Herramientas del men Ver o la combinacin de teclas CTRL+ALT+X. El Editor de cdigo o ventana Fuente permite escribir el cdigo que determina el comportamiento de la aplicacin en general. Cada archivo de cdigo abre su propio editor de cdigo. Para acceder al editor de cdigo se selecciona el archivo que se va a editar en la ventana Proyectos. En el caso especifico de los formularios, adems del acceso normal al editor de cdigo, se puede hacer mediante una pestaa que aparece en la parte inferior del diseador o haciendo doble clic sobre el diseo de la ventana. La ventana propiedades lista todas las propiedades y eventos que hacen parte de un control que se encuentre seleccionado en el diseador de formularios. Para el caso de las propiedades proporciona la posibilidad de modificar sus valores ya sea escribindolos o seleccionndolos de alguna coleccin previamente establecida. En el caso de los eventos, el programador podr definir o seleccionar el nombre del mtodo que controlar uno o ms eventos que hagan parte del control seleccionado. El IDE se encarga de asignar el cdigo de delegacin y establecer la firma del mtodo controlador. Para acceder a la ventana de Propiedades se utiliza el comando Propiedades del men Ver o pulsando la tecla F4. Las diferentes clases que conforman un proyecto, as como los diferentes elementos que las conforman se pueden visualizar por medio de la ventana Clases. A esta ventana se accede mediante el comando Clases del men Ver o la combinacin de teclas CTRL+SHIFT+C. En la parte inferior del entorno de desarrollo se encuentran un grupo de ventanas que le permiten al programador visualizar los resultados de los procesos de compilacin realizados, en especial los mensajes de error generados por el compilador. Las ventanas de ayuda muestran la ayuda incluida en la documentacin de SharpDevelop y tambin de los componentes del framework de desarrollo cuando se ha instalado el SDK de .NET. Para acceder a estas ventanas se utilizan los comandos del men Ayuda.

Figura 6.4: Ventana de herramientas para el diseo de las interfaces grficas.

La mayora de ventanas que se acaban de describir se pueden fijar, cambiar de posicin o cerrar, de acuerdo a los gustos e intereses del programador. Algunas ventanas que no se han descrito en esta seccin guardan una relacin directa con conceptos propios de la programacin en .NET, o su funcionalidad se muestra cuando se realiza la compilacin de los ensamblados, y por esa razn se explicar su utilidad en el
www.pedrov.info

CAPITULO 6 ELEMENTOS DE INTERFAZ GRAFICA WINDOWSFORMS

165

momento que se asuman dichas temticas. Otros elementos como mens y barras de herramientas se entendern mejor con el desarrollo de ejemplos de programacin que muestren en forma prctica su utilidad.

Organizacin de archivos
Desde el punto de vista de la codificacin, una aplicacin real de WindowsForms o WebForms, desarrollada con C#, est conformada por clases y estas, en los IDE, se agrupan en proyectos. A diferencia de su principal antecesor, C++, el lenguaje C# est totalmente orientado a objetos y por lo tanto no soporta fragmentos de cdigo que no hagan parte de una clase. Aunque se podran incluir todas las clases que conforman un programa en un nico archivo de cdigo, esta no es una prctica recomendable ya que no existe aplicacin de software que en un futuro cercano o lejano no necesite revisarse, corregirse o modificarse, y una pobre organizacin en la codificacin de la misma puede traer muchos dolores de cabeza a sus programadores y encargados del mantenimiento. Por esta y otras razones ms, se recomienda colocar cada clase en un archivo diferente, de tal manera que sea fcilmente identificable, tanto al visualizarse desde el interior del entorno de desarrollo como cuando sea necesario manipular sus archivos desde el exterior. Toda la organizacin de los archivos que conforman un proyecto de SharpDevelop se realiza por medio de la ventana Proyectos y el men principal Proyecto. En el siguiente ejemplo vamos a desarrollar una pequea aplicacin de WindowsForms basada en dos clases y que hace uso de los comandos del men Proyecto.

Ejemplo 6.1 Hola SharpDevelop


El programa que se desarrollar, parte de un proyecto vaco y para comprender la forma como SharpDevelop organiza los archivos, se configurar hasta convertirlo en un proyecto de aplicacin al estilo de WindowsForms. Inicie SharpDevelop y cree una nueva solucin haciendo clic en el botn Nueva solucin de la ventana Pgina de inicio o mediante el comando Nuevo del men Archivo. En la ventana Proyecto Nuevo, en la seccin Categoras haga clic sobre el nodo C# y en la seccin Plantillas seleccione Proyecto en Blanco. Para continuar con la secuencia planteada en los anteriores captulos asigne Ejemplo61 como el nombre del proyecto. Finalmente haga clic en el botn Crear. Hecho lo anterior, se crea una solucin con un nico proyecto. Inicialmente el proyecto est constituido nicamente por una o dos referencias que apuntan a System y System.Xml. Este es el primer gran aporte que le hace un IDE como SharpDevelop al trabajo del programador, liberndolo de la tarea de tener que informarle al compilador sobre los recursos que se deben enlazar cada vez que se haga el proceso de generacin del ensamblado. Como el objetivo de este ejemplo es construir un ejecutable WindowsForms, lo primero que se debe hacer es establecer una referencia a System.Windows.Forms. Para esto, en la ventana Proyectos seleccione el nombre del proyecto y haga clic sobre el comando Agregar Referencia del men Proyecto. En la ventana Agregar Referencia se muestran, en las pestaas superiores, al menos cuatro tipos de referencias que pueden establecerse. En la ficha GAC se incluyen todas las referencias que apuntan a componentes incluidos en ensamblados registrados como elementos del framework .NET. En las ficha Proyectos se incluyen las referencias que pueden hacerse a otros proyectos incluidos en la solucin que se esta trabajando actualmente. El Visor de Ensamblados es una forma general de acceder a cualquier ensamblado que ya se encuentre compilado. La ficha COM permite referenciar
pedrov.cs@hotmail.com

166

CAPITULO 6 PROGRAMACION CON C#

componentes COM que hayan sido desarrollados por fuera de la infraestructura .NET o anterior a la aparicin de esta tecnologa. Con respecto a esta ltima opcin, es importante dejar bien claro que aunque existe como tal, ser mejor evitar su uso, ya que los componentes COM son elementos totalmente extraos a la infraestructura que ofrece el framework .NET. Si el programador haba desarrollado componentes COM y los necesita en su aplicacin, ser mejor que vaya pensando en desarrollar la versin .NET de los mismos. Para continuar, haga doble clic sobre las referencias System.Windows.Forms y System.Drawing, y luego sobre el botn Aceptar.

Figura 6.5: La ventana Agregar Referencia permite establecer una o varias referencias a ensamblados o componentes COM.

Para comenzar con la codificacin vamos a agregar una primera clase al proyecto. Manteniendo seleccionado el proyecto, elija el comando Agregar, Nuevo elemento, del men Proyecto y en la categora C# seleccione la plantilla Clase. A esta clase asgnele el nombre Programa.cs. Al hacer clic sobre el botn Crear aparece la plantilla de la clase en el editor de cdigo. Esta clase Programa solo tendr como objetivo establecer el punto de entrada para el ejecutable de la aplicacin.
using System; namespace Ejemplo61 { /// <summary> /// Descripcin de Programa. /// </summary> public class Programa { public Programa()
www.pedrov.info

CAPITULO 6 ELEMENTOS DE INTERFAZ GRAFICA WINDOWSFORMS

167

} }

{ }

Antes de editar la clase Programa, agregue la clase que contendr la ventana que necesita la aplicacin. Al igual que la anterior, por medio del men Proyecto agregue una nueva clase al proyecto y llmela CajaMensajes.cs. Al hacer clic en el botn Crear se genera la plantilla de la nueva clase. Edite este ltimo archivo de clase en la forma como se muestra en el siguiente bloque de cdigo:
using System; using System.Windows.Forms; using System.Drawing; namespace Ejemplo61 { public class CajaMensaje : Form { public CajaMensaje() { // Llamar el mtodo encargado de inicializar la ventana InicializarComponentes(); } void InicializarComponentes() { this.BackColor = Color.Black; this.MinimizeBox = false; this.MaximizeBox = false; this.Width = 300; this.Height = 70; this.Text = "Bienvenido a C#"; // Controlar el evento Paint del formulario this.Paint += new PaintEventHandler(CajaMensajePaint); } void CajaMensajePaint(object emisor, PaintEventArgs e) { // Establece una fuente Font fuente = new Font("Times", 20, FontStyle.Bold); // Definir un rectngulo para fijar el texto RectangleF cuadroTexto = new Rectangle(0, 0, this.Width, this.Height); // Define un formato para asignar al texto StringFormat formatoCadena = new StringFormat(); formatoCadena.Alignment = StringAlignment.Center; // Dibuja una cadena de texto en el cuerpo del formulario e.Graphics.DrawString("Hola SharpDevelop...!", fuente, Brushes.Gold, cuadroTexto, formatoCadena); }

} }

Esta lista la ventana que mostrar la aplicacin cuando se ejecute. Por ahora este solo es un ejercicio de codificacin en el que se comprueba la eficacia de SharpDevelop como ayudante para escribir cdigo. En resumen, la clase se deriva de Form, establece valores para algunas de sus propiedades y controla el evento Paint que se encargar de dibujar en el cuerpo del formulario un mensaje de bienvenida. Los detalles de su
pedrov.cs@hotmail.com

168

CAPITULO 6 PROGRAMACION CON C#

implementacin se analizarn con ms detenimiento cuando se trabaje con trazado de grficos en un captulo posterior. Para completar el desarrollo del proyecto es necesario establecer el punto de entrada del ejecutable, y para ello editamos la clase Programa como se muestra enseguida:
using System; namespace Ejemplo61 { public class Programa { static void Main() { System.Windows.Forms.Application.Run(new CajaMensaje()); } } }

Para compilar la aplicacin se utiliza el comando Generar solucin del men Generar, y para ejecutarla, en el caso de programas ejecutables, se utiliza el comando Ejecutar del men Depurar. El nombre del ensamblado generado corresponde al nombre del proyecto, Ejemplo61.exe, y se guarda en el subdirectorio bin. Al ejecutar la aplicacin se observa que lo hace sobre una consola de comandos. La razn es simple: el compilador por defecto genera una ejecutable de consola. Para informarle al compilador que se desea generar un ejecutable que se ejcute totalmente dentro del sistema grfico de Windows, se debe hacer por medio de la ventana Opciones de proyecto que se muestra a travs del men Proyecto. En esta ventana, el programador puede asignar o modificar todas las opciones relacionadas con el proyecto en la ficha Aplicacin, en especial el tipo de salida, y asignar el valor Aplicacin de Windows. Otro aspecto importante en la ventana Opciones de proyecto son los datos relacionados con la compilacin del ensamblado que se encuentran en la ficha Generar. Aqu se puede establecer la configuracin de la compilacin definitiva, Debug o Release, y la plataforma donde se va a ejecutar el ensamblado. La configuracin Debug incluye en el ensamblado una gran cantidad de informacin adicional relacionada con su estructura para permitirle al depurador controlar la ejecucin e informar sobre el estado de la misma. Esta caracterstica hace que la ejecucin de este tipo de ensamblados no sea la ptima, por lo cual se recomienda utilizarla nicamente para tareas de depuracin. Los ensamblados definitivos deben compilarse en la configuracin Release. Existe un detalle importante que hasta ahora no se haba mencionado. Todos los ejemplos que se han desarrollado cuentan con un nico punto de entrada. Sin embargo, esto no significa que tenga que ser nico en todas las aplicaciones, ya que cada clase que conforma la aplicacin ejecutable puede implementar al menos un punto de entrada. Pero dada esta situacin es necesario informar al compilador cual ser el punto de entrada que se va a utilizar en la ejecucin de la aplicacin. Para establecer este dato, puede utilizar la ventana Opciones de proyecto y en la ficha Aplicacin, en la entrada Objeto Inicial, establecer el punto de entrada que se desea utilizar.

El diseador de formularios
El diseador de formularios es el elemento que permite generar cdigo basndose en procesos grficos. El programador dibuja, modifica y asigna valores a los controles que necesita incluir en un formulario y, en el caso de las aplicaciones WindowsForms, el
www.pedrov.info

CAPITULO 6 ELEMENTOS DE INTERFAZ GRAFICA WINDOWSFORMS

169

diseador se encarga de escribir el cdigo necesario para construir la clase que permite generar la ventana que se deriva de ella. Cada uno de los formularios que se generan con el diseador de formularios es una clase que por cuestiones de organizacin se guarda en dos archivos. En uno de ellos se coloca todo el cdigo generado automticamente por el diseador, resultado de los procesos grficos de construccin de la ventana, y se nombra con la denominacin NombreClase.Designer.cs. En el otro se coloca todo el cdigo que debe escribir el programador para dar funcionalidad a la ventana, y se nombra con la denominacin NombreClase.cs. Construida la ventana, bien se podra decir que el programador pasa a otro nivel de abstraccin, en su labor de programacin, que algunos autores denominan programacin orientada a eventos, en el cual todo el trabajo se centra nicamente en dar funcionalidad a cada uno de los elementos que le interesan, escribiendo el cdigo necesario que controle algunos de los eventos de dichos controles.

Ejemplo 6.2 Diseo de un programa aritmtico


En este ejemplo vamos a construir un programa que se encarga de recibir dos valores numricos y realiza con ellos algunas operaciones aritmticas. Inicie un nuevo proyecto con la categora Aplicaciones de Windows, utilizando la plantilla Aplicacin Windows y denomnelo Ejemplo62. Observar que se genera un formulario vaco y en la ventana Proyectos, entre otros, aparecen dos clases: Program.cs y MainForm.cs. La primera contiene el punto de inicio de la aplicacin, mientras que la segunda contiene la estructura que genera el formulario. Estamos listos para comenzar a programar. Para crear uno o ms controles en la superficie del formulario se debe activar la barra de herramientas con el comando Herramientas del men Ver y seleccionar el tipo de controles Windows Forms. Arrastre desde esta barra cuatro controles Label, tres controles TextBox y cinco controles Button.

Figura 6.6. Diseador de formularios que muestra un formulario en construccin

Para modificar las propiedades de un control se selecciona con el puntero del ratn y de ser necesario se presiona la tecla F4, o se selecciona el comando Propiedades del
pedrov.cs@hotmail.com

170

CAPITULO 6 PROGRAMACION CON C#

men Ver, para mostrar la ventana Propiedades. En esta ventana se modifican los valores de las propiedades que se consideren necesarias para cumplir con los objetivos de la aplicacin. Inicialmente, asigne a la propiedad Text de los controles Label los valores Nmero, Nmero y Resultado, respectivamente. A estos controles no vamos a modificar su propiedad Name por cuanto no se requerir hacer referencia a ellos en la codificacin. Los dems controles si necesitan tener un nombre significativo para los intereses del programador ya que se utilizarn en el proceso de codificacin, y por lo tanto es necesario recurrir a algn tipo de nomenclatura estndar que permita identificarlos fcilmente en una revisin posterior. Comos ya se dijo en un captulo anterior la forma sugerida por .NET para el nombramiento de variables de objeto, utiliza cadenas de texto que comienzan por un nombre que determina el tipo al cual pertenece dicho objeto seguido de una cadena que identifica la funcionalidad del mismo dentro de la aplicacin, utilizando la nomenclatura camel. En los IDE como SharpDevelop se puede establecer el nombre de la variable objeto que identifica a un control mediante la propiedad Name del mismo. Aunque esta caracterstica puede manipularse por parte del programador y un control puede ser perfectamente definido por un nombre de variable objeto diferente al valor de la propiedad Name, pero esta prctica no es recomendable por que puede conllevar a confusiones en el momento de hacer una revisin de cdigo. En la tabla se muestran los valores de las propiedades Name y Text de cada uno de los controles.

Tipo TextBox

Propiedad Name Text Name Text Name Text ReadOnly

Valor textNumero1 0 textNumero2 0 textResultado 0 True buttonSumar Sumar buttonRestar Restar buttonMultiplicar Multiplicar buttonDividir Dividir buttonCerrar Cerrar

Button

Name Text Name Text Name Text Name Text Name Text

Para dar funcionalidad a los controles vamos controlar los eventos Click de cada uno de los botones de comando. Para definir el mtodo que se encargar de controlar un evento se utiliza la ventana Propiedades, haciendo clic sobre el icono eventos. Seleccione el botn de comando Sumar, active la ventana Propiedades, presionando la tecla F4, y haga clic sobre el icono Eventos de esta ventana. El listado que aparece, corresponde a todos los eventos que puede generar el control seleccionado. Seleccione con el puntero del ratn el evento Click y asigne el nombre del mtodo que lo controlar, en este caso ButtonSumarClick. Recuerde que el estilo .NET sugiere que los mtodos se nombren con letra inicial mayscula, y en el caso de aquellos que
www.pedrov.info

CAPITULO 6 ELEMENTOS DE INTERFAZ GRAFICA WINDOWSFORMS

171

controlan eventos debe hacerse iniciando con el nombre del control seguido de una cadena equivalente al nombre del evento controlado. Cuando se ha terminado de establecer el nombre del mtodo controlador y se presiona la tecla ENTER o se hace doble clic sobre el nombre del evento, se escribe en el archivo Designer la lnea de cdigo que establece la delegacin,
this.buttonSumar.Click += new System.EventHandler(ButtonSumarClick);

y en el archivo de codificacin manual se escribe la definicin del mtodo,


void ButtonSumarClick(object sender, EventArgs e) { }

Para eliminar un controlador de un determinado evento se debe utilizar la misma ventana de propiedades. Se selecciona el control deseado y se borra el nombre del mtodo que se desee desconectar de un determinado evento. Esto borra la delegacin que se encontraba en el archivo Designer, pero el mtodo se mantiene, y si desea quitarse debe hacerse manualmente. Establezca los mtodos controladores del evento Click para cada uno de los restantes botones de comando, asignndoles los nombres ButtonRestarClick, ButtonMultiplicarClick, ButtonDividirClick y ButtonCerrarClick, respectivamente. La funcionalidad de los botones de operacin la establece la siguiente codificacin:
void ButtonSumarClick(object sender, EventArgs e) { int numero1 = Convert.ToInt32(textNumero1.Text); int numero2 = Convert.ToInt32(textNumero2.Text); int resultado = numero1 + numero2; textResultado.Text = resultado.ToString(); } void ButtonRestarClick(object sender, EventArgs e) { int numero1 = Convert.ToInt32(textNumero1.Text); int numero2 = Convert.ToInt32(textNumero2.Text); int resultado = numero1 - numero2; textResultado.Text = resultado.ToString(); } void ButtonMultiplicarClick(object sender, EventArgs e) { int numero1 = Convert.ToInt32(textNumero1.Text); int numero2 = Convert.ToInt32(textNumero2.Text); int resultado = numero1 * numero2; textResultado.Text = resultado.ToString(); } void ButtonDividirClick(object sender, EventArgs e) { double numero1 = Convert.ToDouble(textNumero1.Text); double numero2 = Convert.ToDouble(textNumero2.Text); double resultado = 0; if (numero1 != 0) {

Figura 6.7. Ventana de propiedades para definir los controladores de evento.

pedrov.cs@hotmail.com

172

CAPITULO 6 PROGRAMACION CON C#

resultado = numero1 / numero2; textResultado.Text = resultado.ToString(); } else MessageBox.Show("Divisin por cero...", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); }

El botn Cerrar se encarga de finalizar la ejecucin de la aplicacin. En este caso basta con cerrar la ventana activa mediante su mtodo Close y la aplicacin saldr del bucle de ejecucin.
void ButtonCerrarClick(object sender, EventArgs e) { this.Close(); }

En definitiva as es como queda el archivo que contiene la parte de la clase que da funcionalidad a la ventana.
using using using using System; System.Collections.Generic; System.Drawing; System.Windows.Forms;

namespace Ejemplo62 { /// <summary> /// Permite definir una ventana /// </summary> public partial class MainForm : Form { public MainForm() { InitializeComponent(); } void ButtonSumarClick(object sender, EventArgs e) { int numero1 = Convert.ToInt32(textNumero1.Text); int numero2 = Convert.ToInt32(textNumero2.Text); int resultado = numero1 + numero2; } textResultado.Text = resultado.ToString();

void ButtonRestarClick(object sender, EventArgs e) { int numero1 = Convert.ToInt32(textNumero1.Text); int numero2 = Convert.ToInt32(textNumero2.Text); int resultado = numero1 - numero2; textResultado.Text = resultado.ToString(); }

www.pedrov.info

CAPITULO 6 ELEMENTOS DE INTERFAZ GRAFICA WINDOWSFORMS

173

void ButtonMultiplicarClick(object sender, EventArgs e) { int numero1 = Convert.ToInt32(textNumero1.Text); int numero2 = Convert.ToInt32(textNumero2.Text); int resultado = numero1 * numero2; textResultado.Text = resultado.ToString(); } void ButtonDividirClick(object sender, EventArgs e) { double numero1 = Convert.ToDouble(textNumero1.Text); double numero2 = Convert.ToDouble(textNumero2.Text); double resultado = 0; if (numero1 != 0) { resultado = numero1 / numero2; textResultado.Text = resultado.ToString(); } else MessageBox.Show("Divisin por cero...", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } void ButtonCerrarClick(object sender, EventArgs e) { this.Close(); } } }

Llegado a este punto es importante que el lector revise detenidamente cada uno de los archivos de cdigo que se han generado y, con base en lo estudiado en captulos anteriores, dedique un poco de tiempo a comprender cual es el trabajo realizado por parte del diseador de formularios y que funcin desempea cada una de las lneas escritas. El desarrollo de algunas actividades de programacin en las secciones siguientes permitir identificar otras funcionalidades de SharpDevelop que lo convierten en un potente IDE de desarrollo.

La caja de mensajes
La caja de mensajes es un componente prediseado cuya funcin bsica es establecer una comunicacin instantnea con el usuario para logar una interaccin efectiva con la aplicacin. En los captulos anteriores ya se han desarrollado varios ejemplos que utilizan cajas de mensajes, pero hace falta una descripcin un poco ms detallada de este componente grfico para permitirle al programador sacar el mximo provecho de l. Las diferentes versiones de la caja de mensajes son implementadas por la clase MessageBox que se encuentra definida en el espaci de nombres System.Windows.Forms. Esta clase se deriva directamente de la clase base Object y, por tanto, hereda los mtodos implementados en Object. El nico mtodo que implementa MessageBox es Show y se trata de un mtodo esttico, lo cual significa que para llamarlo debe escribirse antecedido del nombre de la clase,
pedrov.cs@hotmail.com

174

CAPITULO 6 PROGRAMACION CON C#

MessageBox.Show(...);

El mtodo Show est sobrecargado y presenta al menos 21 versiones. En el siguiente cuadro se muestran 5 versiones, que generalmente son las ms utilizadas en las aplicaciones estndar:
Sobrecargas del mtodo Show de MessageBox Show(string) Show(string, string) Show(string, string, MessageBoxButtons) Show(string, string, MessageBoxButtons, MessageBoxIcon) Show(string, string, MessageBoxButtons, MessageBoxIcon,MessageBoxDefaultButton)

Con el primer mtodo se muestra el mensaje dentro de una caja de mensajes sin ttulo. En cambio con la segunda versin, mediante el segundo argumento, se puede colocar una cadena de texto en la barra de titulo de la caja de mensajes. Generalmente se coloca el nombre de la aplicacin que lanza el mensaje.
MessageBox.Show("Aqu va un mensaje", "El programa");

Para establecer los botones que se desea mostrar en la caja de mensajes se utilizan las constantes definidas por la enumeracin MessageBoxButtons. Esta define seis constantes, que son las siguientes:
Constantes MessageBoxButtons OK OKCancel AbortRetryIgnore YesNoCancel YesNo RetryCancel

Por ejemplo, para mostrar un mensaje con los botones Si y No (para la versin de .NET en espaol) se debe hacer la siguiente llamada:
MessageBox.Show("Hola mundo", "Programa", MessageBoxButtons.YesNo);

La enumeracin MessageBoxIcon, correspondiente al valor del cuarto parmetro, permite establecer un icono. Estos iconos estn definidos por las siguientes constantes:
Constantes MessageBoxIcon None Hand Stop Error
www.pedrov.info

CAPITULO 6 ELEMENTOS DE INTERFAZ GRAFICA WINDOWSFORMS Question Exclamation Warning Asterisk Information

175

Cuando se muestra ms de un botn en una caja de mensajes es recomendable establecer un botn que ser utilizado por defecto, mediante la enumeracin MessageBoxDefaultButton. Esta caracterstica permite el acceso rpido a dicho botn por medio del teclado, generalmente la tecla ENTER, lo cual facilita la operacin por parte del usuario. Esto es muy til cuando una caja de mensajes se presenta en situaciones relacionadas con tareas repetitivas, como por ejemplo el ingreso de datos, donde el usuario no quiere perder tiempo manipulando el puntero del ratn. Las constantes de esta enumeracin son las siguientes:
Constantes MessageBoxDefaultButton Button1 Button2 Button3

Si la caja de mensajes muestra ms de un botn puede ser necesario saber cual fue el botn que presion el usuario para cerrar la ventana, lo cual se considera como una respuesta al mensaje. Esto se logra fcilmente ya que el mtodo Show devuelve un valor de tipo DialogResult que puede corresponder a cualquiera de los siguientes valores:
Constantes MessageBoxIcon None OK Cancel Abort Retry Ignore Yes No

En el siguiente ejemplo se muestra el uso del mtodo Show en algunas de sus sobrecargas.

Ejemplo 6.3 Unidades lgicas del sistema


La aplicacin mostrar en pantalla las unidades de disco lgicas que se encuentran instaladas en el computador donde se est ejecutando. Inicie una nueva solucin Windows Forms en SharpDevelop, del tipo Aplicacin de consola, y llmela Ejemplo63. Para empezar, agregue una referencia a System.Windows.Forms mediante el comando Agregar referencia del men Proyecto.

pedrov.cs@hotmail.com

176

CAPITULO 6 PROGRAMACION CON C#

Para determinar las unidades lgicas se utiliza el mtodo GetLogicalDrives que devuelve un vector string con los nombres de las unidades instaladas. Modifique el mtodo Main con el siguiente cdigo:
using System; using System.Windows.Forms; namespace Ejemplo63 { class Program { public static void Main(string[] args) { DialogResult resultado; resultado = MessageBox.Show("Desea determinar las unidades lgicos?", "Ejemplo", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (resultado == DialogResult.Yes) { string[] discosLogicos = Environment.GetLogicalDrives(); string discos = ""; foreach(string disco in discosLogicos) { discos += disco + "\n"; } MessageBox.Show(discos, "Unidades lgicas"); } } } }

(En construccin...)

www.pedrov.info

Potrebbero piacerti anche