Top Banner
Sistemas Uni Sistemas Uni Desarrollo de Desarrollo de Aplicaciones de Aplicaciones de escritorio con .NET escritorio con .NET
53
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • Sistemas Uni

    Desarrollo de Aplicaciones de escritorio con .NET

  • Objetivo

    Conocer los elementos involucrados en el desarrollo de una aplicacin de escritorio Windows con Visual Studio 2005 y la plataforma Microsoft .NET, presentando las novedades introducidas al respecto en la nueva versin 2.0

    En el presente curso de entrenamiento se introduce al desarrollo de aplicaciones Windows, presentando .NET 2.0 como framework de desarrollo, para que el alumno pueda conocer y aprovechar al mximo el potencial de esta tecnologa.

    Esta seccin incluye tanto las caractersticas nuevas, como aquellas que han sido modificadas, y permite aplicar lo aprendido en los cursos anteriores del programa Desarrollador 5 Estrellas.

    Acompaan al presente material terico una serie de ejercicios de ejemplo y guas, desarrollados en Visual C# y en Visual Basic .NET, que sirven de apoyo al alumno en el proceso del aprendizaje. Se recomienda la realizacin de los ejercicios propuestos, la lectura del material adicional de referencia asi como tambin la lectura y ejecucin de los ejemplos para lograr una formacin completa en el tema.

  • Prerrequisitos

    Haber cursado y aprobado el mdulo correspondiente a la Estrella 1 del programa Desarrollador 5 EstrellasPara realizar los ejercicios y ver los ejemplos de cdigo adjunto necesita:Herramienta de DesarrolloMS Visual Studio 2005 MS Visual C# 2005 Express Edition MS Visual Basic 2005 Express EditionBase de DatosMS SQL 2005 Express Edition
  • Temario (1/2)

    Introduccin a Windows FormsEl diseador de formulariosEl objeto FormControlesDiseo de Interfaz de UsuarioHerencia visual
  • Temario (2/2)

    ConfiguracinDilogos comunesEnlace a datosDistribucin de la aplicacinReferencias
  • Temario (1/2)

    Introduccin a Windows Forms Qu es Windows Forms ? Qu es un formulario ?Cmo crear un proyecto de aplicacin para WindowsEl diseador de formulariosEl objeto FormControlesDiseo de Interfaz de UsuarioHerencia visual
  • Qu es Windows Forms ?

    Windows Forms es un subconjunto de la .NET Framework Class Library que permite el desarrollo de aplicaciones de escritorio ricas bajo Microsoft Windows.Incluye clases base, interfaces, enumeraciones y controles grficos diversos.

    Las clases proporcionadas por el framework .NET incluyen una gran cantidad para la creacin y administracin de aplicaciones Windows, y como con el resto de los objetos de .NET, los objetos de Windows Forms pueden ser heredados y de esa manera extender su funcionalidad.

    Si no es suficiente con los controles que expone el NameSpace System.Windows.Forms y los NameSpaces asociados, es posible crear nuestras propias clases que hereden de algunas de la propuestas por las libreras de clases base y as lograr la funcionalidad requerida.

  • Qu es un formulario ?

    Un formulario Windows Forms acta como interfaz del usuario local de Windows.Los formularios pueden ser ventanas estndar, interfaces de mltiples documentos (MDI), cuadros de dilogo, etc.Los formularios son clases que exponen propiedades, mtodos que definen su comportamiento y eventos que definen la interaccin con el usuario.

    Los formularios no escapan al modelo de objetos del framework .NET.

    Un formulario Windows no es ms que una instancia de la clase System.Windows.Forms.Form. Puede crearse utilizando cualquier editor de texto, pero es obviamente mucho ms sencillo hacerlo utilizando el diseador de formularios de Visual C# Express Edition o Visual Basic .NET Express Edition.

    Estas son las herramientas que se utilizarn para el armado de los ejercicios y guas paso a paso de este mdulo.

    Para una mayor informacin, por favor consulte el material de referencia del mdulo.

  • Cmo crear un proyecto de aplicacin para Windows

    Utilizando los entornos de desarrollo: Visual C# 2005 Express Edition oVisual Basic 2005 Express Edition,

    se deben seguir estos pasos:

    En el men File, seleccionar New Project

    En la ventana que aparece seleccionar Windows Application

    No es necesario crear un directorio para los archivos del proyecto, stos son creados en un directorio temporal hasta que se decida grabarlos.

    Al crear un proyecto de aplicacin Windows, adems de generarse automticamente un formulario por defecto, se crean una serie de archivos y clases que complementan la aplicacin.

    Entre ellos tenemos:
    Program.cs (o .vb): Contiene una clase esttica (Program) con un mtodo Main() que constituye el punto de entrada de la aplicacin.

    AssemblyInfo.cs (o .vb): Es parte de cada proyecto y sirve para personalizar datos importantes acerca del ensamblado (Assembly)

    Settings.cs (o .vb): Es el encargado del acceso a la configuracin de usuario de la aplicacin (se profundizar ms adelante en esta presentacin)

    References: Por defecto ya se incluyen algunas referencias a otros assemblies de .NET. Desde esta carpeta se pueden agregar o quitar las que se requieran para el caso particular.

  • Temario (1/2)

    Introduccin a Windows FormsEl diseador de formulariosEl objeto FormControlesDiseo de Interfaz de UsuarioHerencia visual
  • El diseador de formularios

    Al momento de disear un formulario, el diseador de Visual Studio Express escribe de forma automtica el cdigo que describe a cada uno de los controles y al propio formulario.El concepto de Partial class que incorpora .NET 2.0 permite separar el cdigo de una clase en varios archivos fuentes diferentes.El diseador de formularios utiliza esta tcnica para escribir en un archivo aparte todo el cdigo que l mismo genera.Esto permite organizar ms claramente el cdigo, manteniendo separada la lgica de la aplicacin en un archivo diferente.

    El diseador de formularios es bsicamente un potente generador de cdigo. Cada vez que se establece un valor para una de las propiedades del formulario, se coloca un nuevo control, o se asocia un mtodo manejador a alguno de los eventos de esos controles o del propio formulario, el diseador est escribiendo una o varias lneas de cdigo C# o Visual Basic .NET que reflejan esos cambios.

    Este cdigo est encerrado en una regin (#region) llamada Windows Form Designer generated code. Esto es as desde las primeras versiones de .NET, pero en la versin 2.0 se lleva un paso ms all. Valindose del concepto de Partial Class, el cdigo generado ahora est separado en un archivo fsico diferente cuyo nombre respeta la sintaxis [NombreFormulario].Designer.cs (o .vb).

  • Temario (1/2)

    Introduccin a Windows FormsEl diseador de formulariosEl objeto FormGeneralidadesEventos, MtodosCiclo de vidaTrabajando con el MouseTrabajando con el TecladoFoco de controles y orden de tabulacinMessage BoxControlesDiseo de Interfaz de UsuarioHerencia visual
  • Generalidades (1/2)

    El objeto Form es el principal componente de una aplicacin Windows.Algunas de sus propiedades admiten valores de alguno de los tipos nativos de .NETEjemplo Cdigo C#miForm.ShowInTaskBar = false;miForm.Opacity = 0.83;miForm.ShowInTaskBar = FalsemiForm.Opacity = 0.83Ejemplo Cdigo Visual Basic

    Como se mencionaba anteriormente, a travs de las propiedades y mtodos del objeto Form definiremos la forma en que se va a comportar un formulario.

    Estableciendo en true el valor de la propiedad IdMdiContainer estaremos creando una interfaz de mltiples documentos (MDI). Si un formulario MDI se cierra, se cerrarn previamente todos los formularios hijos (child) que de l dependan.

    Para visualizar un formulario como hijo de un formulario contenedor MDI, se debe asignar una referencia a ese formulario padre a travs de la propiedad MdiParent.

    A travs la propiedad AutoValidate (que el objeto form hereda de la clase ContainerControl y que es nueva en .NET 2.0) se puede controlar la forma en que se comportan los controles al momento de perder el foco y permite controlar la validacin de los datos que contienen.

  • Generalidades (2/2)

    Otras propiedades requieren la asignacin de objetosEjemplo en C#miForm.Size = new Size(100, 100);miForm.Location = new Location(0, 0);Ejemplo en Visual BasicmiForm.Size = New Size(100, 100)miForm.Location = New Location(0, 0)

    Siguiendo con las propiedades del formulario, existen algunas de ellas que reciben datos que son objetos .NET en s mismos.

    Esto nos da una mayor flexibilidad, ya que a una misma propiedad de diferentes controles es posible asignarles una referencia a un mismo objeto, por ejemplo:

    Cdigo en C#

    Font fuenteGrande = new Font(Arial, 24);

    Font fuenteChica = new Font(Arial, 12);

    this.Font = fuenteGrande;

    this.botonAceptar.Font = fuenteChica;

    this.botonCancelar.Font = fuenteChica;

    Cdigo en VB.NET

    Dim fuenteGrande As New Font(Arial, 24)

    Dim fuenteChica As New Font(Arial, 12)

    Me.Font = fuenteGrande

    Me.botonAceptar.Font = fuenteChica

    Me.botonCancelar.Font = fuenteChica

  • Mtodos

    Show()Visualiza el formulario. Puede especificarse su formulario Owner.Si un formulario A es owner (dueo) de otro B, el formulario B siempre se visualizar sobre el A, sin importar si otro formulario est activo.ShowDialog()Visualiza el formulario como cuadro de dilogo Modal. Un formulario visualizado de forma modal no permite que otro formulario perteneciente a la misma aplicacin tome foco. Esta opcin es utilizada para mostrar cuadros de dilogo y focalizar la atencin del usuario.

    Visualizar un formulario especificando su owner (dueo), usando la sobrecarga correspondiente del mtodo Show(), permite imitar el comportamiento tpico que, por ejemplo, tienen las ventanas contenedoras de herramientas (toolbox) de los programas de edicin de imgenes.

    Estas tipo de ventanas, sin importar que otro formulario de la aplicacin est activo (tenga foco), se muestran siempre por sobre el resto de las dems.

    Los cuadros de dilogos (aquellas ventanas visualizadas en forma modal) no permiten continuar con el proceso hasta que el usuario responda a sus requerimientos y los cierre, ya que no dejan que ninguna otra ventana de esa misma aplicacin tome foco.

  • Eventos (1/2)

    Manejadores de eventosPor cada evento soportado por el Form (o por cualquier otro objeto) es posible definir varios mtodos manejadores.A su vez, un mtodo manejador puede controlar eventos disparados por diferentes objetos.

    Cada evento administra una coleccin de mtodos manejadores que respondern a dicho evento. Es por esto que se puede vincular varios mtodos al mismo evento. El orden en que se irn invocando cada uno de estos mtodos es el mismo orden en que fueron vinculados al evento.

    Vincular diferentes eventos (que pueden pertenecer tambin a diferentes objetos) a un mismo mtodo manejador, permite conseguir una funcionalidad centralizada. Mediante el objeto sender que reciben como parmetro los manejadores, es posible saber qu objeto dispar ese evento.

    Deber considerarse que abusar de esta tcnica, donde un mismo mtodo se encarga de controlar eventos disparados por fuentes muy diferentes, puede llegar a generar cdigo difcil de mantener.

  • Eventos (2/2)

    Ejemplos:Cdigo C#

    // Varios manejadores para un evento

    this.Click += new EventHandler(MetodoManejador1);

    this.Click += new EventHandler(MetodoManejador2);

    // Un mismo manejador para diferentes eventos

    this.Load += new EventHandler(ManejadorCentralizado);

    this.Activated +=new EventHandler(ManejadorCentralizado);

    Varios manejadores para un evento

    AddHandler Me.Click, AddressOf MetodoManejador1

    AddHandler Me.Click, AddressOf MetodoManejador2

    Un mismo manejador para diferentes eventos

    AddHandler Me.Load, AddressOf ManejadorCentralizado

    AddHandler Me.Activated, AddressOf ManejadorCentralizado

    Cdigo Visual Basic

    Estos ejemplos (en C# y Visual Basic .Net) demuestran las dos tcnicas para manejar eventos vistas en la diapositiva anterior:

    - Varios manejadores para un mismo evento.

    En este caso el evento Click de un formulario es atendido por dos mtodos: MetodoManejador1 y MetodoManejador2; estos mtodos

    pertenecen a la coleccin de mtodos que puede administrar el evento.

    - Un mismo manejador para diferentes eventos.

    En este caso los eventos Load y Activated de un formulario, son atendidos por el mismo mtodo, as es posible tener un control centralizado.

  • Ciclo de vida del formulario

    Muchos de los eventos a los que responde el objeto Form pertenecen al ciclo de vida del formularioEntre estos eventos se encuentran los siguientes, en orden de ocurrencia:Load: El formulario est en memoria, pero invisible.Paint: Se pinta el formulario y sus controles.Activated: El formulario recibe foco.FormClosing: Permite cancelar el cierre.FormClosed: El formulario es invisible.Disposed: El objeto est siendo destruido.

    El modelo de eventos que expone el objeto Form es muy amplio, por lo que inicialmente hay que conocer bien al momento de decidir qu evento vamos a suscribir para escribir nuestro cdigo.

    Algunos de los eventos detallados se disparan ms de una vez durante el ciclo de vida de un formulario. El ciclo de vida de un formulario es el tiempo en que la instancia del formulario permanece en memoria.

    Pongamos como ejemplo el evento Activated. Este evento se dispara cuando el formulario se vuelve activo (recibe foco). Si escribiramos en el manejador de ese evento cdigo que muestre un cuadro de dilogo modal (por ejemplo un MessageBox, que se ver ms adelante en esta presentacin), al momento de cerrar ese dilogo modal se disparara nuevamente el evento Activated provocando una iteracin infinita.

    Otro de los eventos que se dispara ms de una vez durante el ciclo de vida del formulario es el evento Paint.

    El evento Load tambin es un buen punto para la inicializacin de los diferentes controles que se encuentren en el formulario, tener en cuenta que en este punto todos los controles estn inicializados pero el formulario es an invisible.

    El evento FormClosing es el punto ideal para mostrar un mensaje de confirmacin al usuario que permita cancelar el cierre del formulario.

    El evento FormClosed es utilizado para la liberacin de recursos que hubieran podido inicializarse en el evento New.

  • Trabajando con el Mouse

    El mouse puede ser controlado escribiendo cdigo para alguno de estos eventos:MouseClickMouseEnterMouseMoveA travs de los argumentos que reciben los manejadores de estos eventos se puede obtener:La posicin del punteroQu botn fue presionadoCantidad de pasos que fue girada la rueda

    Como se indica en la diapositiva, a travs de los argumentos que recibe el manejador de los eventos relacionados con el Mouse (argumentos de la clase MouseEventArgs) se recibe gran cantidad de informacin.

    La propiedad Buttons contiene un enumerado que puede controlar hasta 5 botones.

    La propiedad Clicks permite conocer la cantidad de clicks que se produjeron desde el evento anterior.

    La propiedad Delta permite controlar el uso de la rueda del mouse. Un valor positivo indica que la rueda se movi hacia delante. Un valor negativo indica movimiento hacia atrs, por ejemplo:

    Cdigo en C#

    private void Form1_MouseMove(object sender, MouseEventArgs e)

    {

    if (e.Delta > 0)

    MoverArriba();

    else

    MoverAbajo();

    }

    Cdigo en VB.NET

    Private Sub Form1_MouseMove(ByVal sender As System.Object, _

    ByVal e As System.Windows.Forms.MouseEventArgs) _

    Handles MyBase.MouseMove

    If e.Delta > 0 Then

    MoverArriba()

    Else

    MoverAbajo()

    End If

    End Sub

  • Trabajando con el Teclado

    El manejador del evento KeyPress informa a travs del argumento e.KeyChar el cdigo de la tecla presionada.Es posible cancelar el comportamiento por defecto asignando true al argumento e.Handled.Los argumentos que reciben los manejadores de los eventos KeyDown y KeyUp informan del estado de las teclas Alt, Ctrl y Shift.El evento HelpRequested es disparado cuando se presiona la tecla F1.

    Como cualquier otro manejador de eventos del framework .NET, aquellos relacionados con el manejo del teclado reciben dos parmetros:

    Sender: Es una referencia al objeto que dispar el evento.

    e: Es un objeto de tipo KeyPressEventArgs que expone dos propiedades:

    KeyChar: Es el caracter correspondiente a la tecla presionada

    Handled: Es un valor de tipo lgico (boolean) al cul se le puede asignar true para informarle al motor de procesamiento de teclado que la tecla ha sido controlada y que el evento ha sido procesado.

    Ejemplo: Este cdigo utiliza el evento KeyPress de un control TextBox para convertirlo en un control que slo acepta nmeros. Esto se consigue verificando el cdigo de la tecla presionada.

    Cdigo en C#

    private void txtNumero_KeyPress(object sender, KeyPressEventArgs e)

    {

    if (!char.IsDigit(e.KeyChar) || char.IsControl(e.KeyChar))

    {

    e.Handled = true;

    }

    }

    Cdigo en VB.NET

    Private Sub TextBox1_KeyPress(ByVal sender As System.Object, _

    ByVal e As System.Windows.Forms.KeyPressEventArgs) _

    Handles TextBox1.KeyPress

    If Not (Char.IsDigit(e.KeyChar) Or Char.IsControl(e.KeyChar)) Then

    e.Handled = True

    End If

    End Sub

  • Foco de controles y
    orden de tabulacin

    El objeto Form expone diferentes propiedades, mtodos y eventos que permiten controlar la navegabilidad del formulario:Propiedad CanFocus: Indica si el control puede tomar foco.Propiedad Focused: Indica si el control tiene el foco actualmente.Mtodo Focus(): Mueve el foco al objeto deseado.Orden de tabulacin (Propiedad TabIndex)En forma visual, desde el diseador de formularios, es posible configurar el orden en el que el foco se ir moviendo por los controles.

    En el diseo de formularios es fundamental conseguir una buena navegabilidad entre los diferentes controles de ese formulario.

    En procesos donde el ingreso de datos por parte del usuario es intensivo, hacer un mal uso del manejo del foco en los controles puede derivar en el fracaso de la aplicacin.

    Se dice que un control tiene foco cuando es el control que est activo y es quien recibe los mensajes que enva el sistema operativo al presionar una tecla. En el caso de un cuadro de texto (TextBox), el que tiene foco ser el que tenga el cursor de escritura (I).

    El diseador de formularios dispone de una muy prctica herramienta para establecer el orden de tabulacin de los controles del formulario (el orden en el que los controles irn tomando foco al presionar la tecla Tab).

    Teniendo abierto el formulario con el diseador, si seleccionamos la opcin Tab Order del men View, aparecer en la esquina superior izquierda de cada uno de los controles una etiqueta de color azul con un nmero.

    Ese nmero es el que determina el orden.

    Haciendo click con el mouse en cada uno de los controles en el orden en que queremos establecer el flujo del foco, esos nmeros irn cambiando y podremos determinar as el orden en que los controles irn recibiendo foco al momento de ejecutar la aplicacin.

    El orden de tabulacin est representado por la propiedad TabIndex que poseen todos los controles que pueden recibir foco. Un menor valor en la propiedad TabIndex de un control indica que ese control tomar foco antes que otro control que posea un valor mayor.

    Es posible que ms de un control tenga el mismo valor en su propiedad TabIndex. En ese caso, tomar primero foco aquel que est ms cerca del usuario, es decir, un mayor Z-order (en caso que dos controles estuvieran superpuestos, es decir, que compartan parte de la superficie del formulario, el que tiene mayor Z-order es el que aparece por sobre el otro).

  • MessageBox

    Para mostrar informacin o pedir intervencin del usuario, es posible utilizar la clase MessageBox.Esta clase contiene mtodos estticos que permiten mostrar un cuadro de mensaje para interactuar con el usuario de la aplicacin.Los parmetros se especifican a travs de enumerados que facilitan la legibilidad del cdigo, por ejemplo:MessageBoxButtons.AbortRetryIgnoreMessageBoxIcon.ErrorMessageBoxDefaultButton.Button1

    No es posible crear una instancia de la clase MessageBox. Para mostrar los mensajes simplemente se debe invocar al mtodo (esttico) Show.

    La manera en que se visualizar el mensaje (el ttulo, el propio mensaje, los conos, cantidad y tipo de botones que se mostrarn, etc.) se determinan por los parmetros que se pasen a ese mtodo.

    El mtodo Show devuelve un valor de tipo DialogResult que deber ser evaluado para saber en qu botn presion el usuario en caso de haberse indicado mostrar ms de uno.

    Para mayor referencia, consultar el ejemplo Menu, controles, dilogos comunes que acompaa a esta presentacin.

  • Temario (1/2)

    Introduccin a Windows FormsEl diseador de formulariosEl objeto FormControlesControles de WindowsControles contenedoresMenDiseo de Interfaz de UsuarioControles Extender ProvidersHerencia visual
  • Controles de Windows (1/3)

    Gran parte del xito de una aplicacin Windows consiste en elegir y manejar adecuadamente los controles que ofrece .NET.Entre los controles nativos se encuentran controles totalmente nuevos y versiones mejoradas de sus pares de .NET 1.1.Nuevos controles como el control BindingSource mejoran notablemente el enlace de datos provenientes de muy diferentes fuentes de datos.
  • Controles de Windows (2/3)

    MaskedEditEs un control que permite el uso de mscaras personalizadas para facilitar la entrada de datos.TextBoxCuadro de texto que, entre otras mejoras tiene la funcionalidad de auto completar.LabelSi el texto ocupa ms lugar que el largo del control, gracias a la nueva propiedad AutoEllipsis incorporada en .NET 2.0, el exedente se reemplaza automticamente con tres puntos (...)

    Desde las versiones anteriores del framework .NET han sido agregados varios nuevos controles, y a los ya existentes, se les ha incorporado muchas mejoras.

    Nuevos controles como MenuStrip / ToolStrip, Splitter, Panel, TableLayoutPanel y FlowLayoutPanel permiten crear complejas interfaces de usuario, con espacios que se reacomodan automticamente al redimensionar la ventana, sin escribir una sola lnea de cdigo.

    BindingSource, BindingNavigator y DataGridView son controles que aprovechan las mejoras que incorpora .NET 2.0 en relacin al enlace a datos (binding) provenientes de muy diferentes fuentes, como ser, bases de datos, colecciones .NET u objetos de negocio.

    BrackgroundWorker es un nuevo control que encapsula funcionalidad que permite ejecutar tareas que consumen mucho tiempo de manera asincrnica.

    Para mayor informacin, ver el ejemplo WindowsControls que acompaa a esta presentacin.

  • Controles de Windows (3/3)

    DataGridViewEs una versin mejorada del DataGrid control de NET 1.1 con funcionalidad de modo Virtual. Permite enlazar datos originados en una Base de Datos a medida que se necesitan.TreeViewUtilizando la nueva propiedad DrawMode es posible sobreescribir la manera en que el sistema operativo dibuja cada nodo del rbol.

    DataGridView

    Algunas caractersticas ms:

    DataGridView:

    Soporta el modelo de enlace a datos estndar de Windows Form, pero adems puede enlazarse a cualquier clase que implemente la interfaz IList (incluso arrays unidimensionales), IListSource (tales como DataSet o DataTable), IBindingList (como la clase BindingList), IBindingListView (como la clase BindingSource).Puede manejar datos de un modo desconectado, es decir, sin enlace a una fuente de datos (utilizando el mtodo Add de la coleccin Rows del control DataGridView)Pude personalizarse la forma en que se muestran los datos con estilos predefinidos. Si las necesidades van ms all de lo que propone la clase DataGridViewCellStyle es posible extender su capacidad creando celdas, columnas y filas propias.

    TreeView

    Es posible mostrar cuadro de seleccin (check boxes) al lado de cada nodo (propiedad CheckBoxes).Tambin es posible seleccionar o deseleccionar nodos programticamente (propiedad Checked).A travs de las propiedades ImageList, ImageIndex y SelectedImageIndex es posible asignar una imagen a cada nodo, tanto para el modo normal, como para cuando el nodo est seleccionado.
  • Controles Contenedores

    Algunos controles como el propio Form, Panel o GroupBox heredan de la clase ContainerControl en lugar de hacerlo directamente de Control.Por este motivo, poseen una coleccin mediante la que se puede acceder a los controles que contiene.Slo se puede acceder a los controles de nivel superior, no a todos los controles contenidos.

    Como se menciona en la diapositiva, cada control contenedor maneja una coleccin de referencias a los controles que contiene.

    Dado que slo es posible acceder a los elementos de primer nivel, se requerir de una funcin recursiva para recorrer todos los controles que contiene un formulario cuando entre ellos exista al menos un control contenedor.

    Por ejemplo, si un formulario contiene dos controles GroupBox y a su vez, cada uno de ellos, contiene tres controles TextBox, la expresin:

    miFormulario.Controls.Count

    devolver un valor de 2 cuando en realidad existe un total de 8 controles en el formulario.

  • Men (1/2)

    El nuevo control MenuStrip provee un sistema de men para un formulario.MenuStrip es contenedor de objetos como ToolStripMenuItem, ToolStripComboBox, ToolStripSeparator, ToolStripTextBox.El control ContextMenuStrip representa un men que ser mostrado al usuario cuando presione el botn derecho del mouse. Tambin puede contener los mismos controles que MenuStrip.Las propiedades MergeAction y MergeIndex del objeto ToolStripItem permiten controlar la manera en que los men de dos diferentes ventanas se mezclarn.

    Con el agregado de controles de men en una aplicacin Windows, surgen una serie de necesidades. Aqu detallamos cmo llevar a cabo algunas de las ms comunes:

    Para mostrar una marca (check) en un comando de men se debe asignar true a la propiedad Checked.Para mostrar una marca (check) en un comando de men que cambie de estado con cada click se debe asignar true a la propiedad CheckOnClick.Es posible agregar una imagen (normalmente un icono) a un comando de men. Para ello se debe asignar el nombre de la imagen a la propiedad Image.Para mostrar una lnea de separacin entre dos comandos de men, se debe insertar (con el mtodo Add o utilizando el diseador de formularios) un men item de tipo ToolStripSeparator.

    En aplicaciones del tipo MDI (Multiple Document Interface o Interfase de documentos mltiples) el tipo de ventanas hijas podra ser diferente de la ventana MDI padre. Por ejemplo, la ventana MDI podra contener una planilla de clculo y la ventana hija podra contener un grfico estadstico. En tal caso, si se quieren actualizar las opciones del men principal (el de la ventana MDI) con las opciones que contiene el men de la ventana hija cuando sta est activa se deben seguir los siguientes pasos:

    Establecer la propiedad AllowMerge del men principal en true.Establecer la propiedad AllowMerge del men de la ventana hija en true.Establecer la propiedad MergeAction de cada uno de los elementos del men de la ventana hija en Append.
  • Men (2/2)

    En la imagen se ve una aplicacin que utiliza los controles MenuStrip y ToolStrip. En segundo plano se ve el diseador de formularios.

    Para mayor referencia de utilizacin de los eventos de este control, ver el ejemplo que acompaa a esta presentacin denominado Menu, controles, dilogos comunes.

  • Temario (1/2)

    Introduccin a Windows FormsEl diseador de formulariosEl objeto FormControlesDiseo de Interfaz de UsuarioSnaplinesDocument OutlinePaneles de LayoutAnchor y DockingControles Extender ProvidersHerencia visual
  • Snaplines

    Son lneas que se dibujan automticamente en el diseador de formularios al momento de posicionar el control.Ayudan a mantener la correcta distancia entre los controles y entre stos y su contenedor.

    Cuando un control es colocado en el formulario en tiempo de diseo, el diseador muestra una serie de lneas para ayudar en la alineacin de esos controles. Estas lneas generalmente incluyen bordes, mrgenes y alineamiento a la base del texto de los controles.

    En Windows Forms .NET 2.0 todos los controles tienen una propiedad Margin. Es la distancia que existe alrededor del control. Cuando dos controles son movidos uno cerca de otro y cuando la distancia es igual a la suma de sus mrgenes se muestra una lnea snapline roja. Esta es la distancia que las guas de diseo de interfaces de usuario recomiendan.

    Los controles contenedores tienen una nueva propiedad llamada Padding. Es la distancia interna desde el borde del control contenedor al borde del control que est siendo ubicado dentro de suyo. Una lnea snapline tambin se muestra cuando se alcanza esta distancia.

    Es posible definir snaplines personalizadas para controles propios.

    Se encontrar mayor informacin en las referencias a las clases SnapLines y ControlDesigner.

  • Document Outline

    Mediante esta herramienta es posible ver la jerarqua de controles del formulario en forma de TreeView, y adems editar el nombre de esos controles.

    Desde la ventana Document Outline, adems de ver claramente en forma jerrquica la disposicin de controles del formulario, es posible tambin cambiar el nombre de los mismos, por lo que se vuelve una utilidad interesante que sirve para asignar nombres a los controles de manera visual y rpida.

  • Layout Panels

    TableLayoutPanelEs similar a disear una tabla en un formulario HTML.Facilita la ubicacin de los controles en escenarios de localizacin.Facilita la creacin de interfaces redimensionables.FlowLayoutPanelLos controles contenidos fluyen como en el modo por defecto de un formulario HTML.

    Estos controles no estn destinados en s mismo para ser mostrados en pantalla, sino para aplicar lgica de distribucin de los controles que contienen.

    Utilizando un control FlowLayoutPanel, los controles se irn colocando uno a continuacin de otro hasta ocupar el ancho del formulario, el control siguiente se colocar en una lnea inferior. Si en tiempo de diseo el formulario es redimensionado reduciendo su ancho, los controles se irn reacomodando hacia abajo para no ocupar un espacio mayor al nuevo ancho del formulario.

    El control TableLayoutPanel permite dar una distribucin tabular a los controles, es decir, es posible crear columnas bajo las cuales se alinearan los controles. Estas columnas podrn tener anchos absolutos (un tamao fijo en pxeles) o relativos (un porcentaje del tamao de su contenedor). De esta manera, al redimensionar el formulario, los controles tambin se irn reacomodando pero respetando la estructura tabular.

  • Anchor y Docking

    AnchorAutomatiza el redimensionamiento y posicionamiento de los controles cuando se redimensiona el formulario.Los controles pueden anclarse contra cualquier combinacin de los cuatro bordes del formulario.DockingLa propiedad Dock (que exponen todos los controles Windows) permite pegar un control a alguno de los cuatro bordes del formulario.

    Anchor: Sin escribir cdigo, un TextBox anclado a los cuatro bordes del formulario se redimensionar automticamente cuando lo haga su contenedor.

    Docking: El control ocupar entonces todo el ancho de ese borde elegido. Tambin es posible pegarlo a los cuatro bordes simultneamente, con lo que el control pasar a ocupar la superficie completa de su contenedor.

    Estas propiedades, junto con las herramientas que se ha visto en las diapositivas anteriores, hacen que disear complejas interfaces sea casi un juego de nios.

    No hay entonces que preocuparse por escribir complejas funciones de clculo de coordenadas y tamaos para poder hacer que los controles de un formulario se reacomoden automticamente al momento de redimensionarlo.

  • Temario (1/2)

    Introduccin a Windows FormsEl diseador de formulariosEl objeto FormControlesDiseo de Interfaz de UsuarioControles Extender ProvidersHerencia visual
  • Controles Extender Providers

    Son controles que, una vez colocados en un formulario, agregan nuevas propiedades a los otros controles existentes.ErrorProvider: Permite asociar un error a un control mostrando un cono que parpadea al lado de dicho control.HelpProvider: Permite asociar a un control desde una simple cadena de texto un archivo Help que sern mostrados al presionar F1.ToolTip: Es el clsico rectngulo que aparece asociado a un control y que es mostrado cuando el mouse se detiene sobre l.
  • Temario (1/2)

    Introduccin a Windows FormsEl diseador de formulariosEl objeto FormControlesDiseo de Interfaz de UsuarioControles Extender ProvidersHerencia visual
  • Herencia Visual

    Dado que un formulario Windows es como cualquier otra clase .NET, es posible aplicar herencia.Al heredar de un formulario base, adems de sus miembros, se heredan todos los controles que en l se encuentren.Permite entre otras cosas:Unificar el diseo de las interfaces de usuario.Reutilizar funcionalidad de formularios similares.

    La herencia visual es una poderosa herramienta que permite estandarizar el diseo y el comportamiento de los formularios a lo largo del proyecto, o inclusive, en diferentes proyectos.

    Dado que, como se ha mencionado anteriormente, un formulario no es ms que una instancia de una clase llamada System.Windows.Forms.Form, nada impide crear un formulario con los controles bsicos.

    Podra crearse un formulario con un par de botones predeterminados (Aceptar y Cancelar por ejemplo), aplicarle algn diseo de tipos de letras y colores, agregar mtodos con funcionalidad predeterminada (traduccin automtica, seguridad, etc.) para finalmente utilizarlo como un formulario base a partir del cul se heredarn todos los dems formularios de la aplicacin.

    Este formulario base podra formar parte del proyecto Windows en el que estamos trabajando o inclusive ser encapsulado en un proyecto Librera de Clases (.dll) para ser reutilizado luego en otros muchos proyectos.

  • Temario (2/2)

    ConfiguracinDilogos comunesEnlace a datosDistribucin de la aplicacinReferencias
  • Configuracin

    Las Propiedades Dinmicas permiten almacenar preferencias del usuario en archivos de configuracin asociados a la aplicacin.Estos valores pueden ser ledos y grabados tanto en diseo como en ejecucin.Por cada valor que se almacena se puede definir el nombre, tipo de dato y alcance (usuario o aplicacin).Es posible adems enlazar (binding) propiedades dinmicas a controles del formulario.

    Utilizando esta funcionalidad, incorporada en .NET 2.0, es posible personalizar aplicaciones Windows con propiedades tales como Color de Fondo, Imagen de Fondo, Nombre de la compaa, Domicilio de la compaa, cadenas de conexin a bases de datos, nombre del servidor, etc.

    El mtodo InitializeComponent utiliza la clase System.Configuration.AppSettingsReader para cargar el valor de esas propiedades en tiempo de ejecucin.

    Entorno de desarrollo de Visual Studio Express crea automticamente la clase Settings que es utilizada para leer y grabar esos valores en tiempo de ejecucin con pocas o ninguna lnea de cdigo.

  • Temario (2/2)

    ConfiguracinDilogos comunesEnlace a datosDistribucin de la aplicacinReferencias
  • Dilogos Comunes

    Los cuadros de dilogo comunes permiten interaccin con el usuario para ejecutar acciones comunes como abrir un archivo, configurar la impresin, seleccionar un color del sistema, etc.Slo basta configurar algunas propiedades e invocar su mtodo ShowDialog().Alguno de los controles que muestran estos dilogos son:ColorDialogPrintDialogSaveDialogOpenDialog
  • Temario (2/2)

    ConfiguracinDilogos comunesEnlace a datosColeccionesObjeto BindingSourceADO.NETDistribucin de la aplicacinReferencias

    El enlace a datos (o DataBinding) es la accin de asociar de manera automtica o semi-automtica datos de una fuente de datos con el contenido de controles grficos que se mostrar a los usuarios. La fuente de datos de un databinding puede ser un objeto de ADO.NET (DataSet, XxxDataReader), un documento XML proveniente de un servicio web o una coleccin de objetos propios (Ilist, ArrayList, etc).

  • Colecciones

    Enlace de un ComboBox a datos provenientes de un ArrayList:Cdigo C#

    System.Collections.ArrayList Paises =

    new System.Collections.ArrayList();

    Paises.Add("Argentina");

    Paises.Add("Brasil");

    Paises.Add("Uruguay");

    comboBox1.DataSource = Paises;

    Cdigo Visual Basic

    Dim Paises As System.Collections.ArrayList = New _System.Collections.ArrayList

    Paises.Add("Argentina")

    Paises.Add("Brasil")

    Paises.Add("Uruguay")

    comboBox1.DataSource = Paises

    Se describe aqu, lnea por lnea, el cdigo de ejemplo mostrado en la diapositiva (para ambos lenguajes):

    Lnea 1: Se declara e instancia una coleccin de tipo ArrayList.

    Lnea 2, 3 y 4: Se agregan nuevos elementos a la coleccin.

    Lnea 5: Se enlaza el control Combo Box a la coleccin (ArrayList).

    Es posible este tipo de enlace (binding) porque como se mencion para el caso del DataGridView (ver diapositiva 26), el control ComboBox soporta enlaces a clases que implementen la interfaz IList (como el ArrayList entre otros).

    Otra posibilidad es crear un ArrayList donde cada uno de sus miembros sea un objeto de una clase propia (por ejemplo llamada MiClase que simplemente contenga dos atributos: Codigo y Descripcion, y eventualmente un constructor parametrizado que asigne estas propiedades automticamente).

    De esta manera asignando el ArrayList a la propiedad DataSource, Cdigo a la propiedad ValueMember y Descripcion a la propiedad DisplayMember, el ComboBox manejar internamente el cdigo del elemento seleccionado. Para recuperar ese cdigo nicamente debemos verificar el valor de la propiedad SelectedValue en el manejador del evento SelectedIndexChanged.

    Cdigo en C#

    ArrayList paises = new ArrayList();

    paises.Add(new MiClase(1, "Argentina"));

    paises.Add(new MiClase(1, "Brasil"));

    paises.Add(new MiClase(1, "Uruguay"));

    ComboBox1.DataSource = paises;

    ComboBox1.ValueMember = "Codigo;

    ComboBox1.DisplayMember = "Descripcion;

    Cdigo en VB.NET

    Dim paises As New ArrayList

    paises.Add(New MiClase(1, "Argentina"))

    paises.Add(New MiClase(1, "Brasil"))

    paises.Add(New MiClase(1, "Uruguay"))

    ComboBox1.DataSource = paises

    ComboBox1.ValueMember = "Codigo"

    ComboBox1.DisplayMember = "Descripcion"

  • Objeto BindingSource

    El objeto BindingSource permite el enlace de controles a datos provenientes de fuentes de datos (DataSource) de tres tiposDataBase: Crea internamente un dataset.WebService: Crea una referencia web a un servicio que es el que proporciona los datosObject: Utiliza una clase de negocios como fuente de datos creando automticamente una coleccin de elementos de esa clase.Usndolo junto a un control DataBindingNavigator y un DataGridView conforman un formulario de ABM sin escribir cdigo alguno.

    El componente BindingSource tiene dos propsitos.

    Primero, provee una capa de abstraccin cuando se enlazan los controles de un formulario a datos. Esto se consigue enlazando el componente BindingSource a la fuente de datos (Database, WebService y objeto de negocio) y luego enlazando los controles del formulario al componente. Toda interaccin con los datos, incluyendo navegacin, ordenamiento, filtrado y actualizacin, se realiza con llamadas al componente BindingSource.

    Segundo, el componente BindingSource puede actuar como una fuente de datos fuertemente tipada. Al enlazar un control a este componente, se crea automticamente una lista de instancias de ese tipo.

    Si se asocia un control BindingNavigator al componente BindingSource, se pueden automatizar las tareas que se mencionaban ms arriba.

  • ADO.NET (1/2)

    Adems de utilizar el objeto BindingSource, es posible enlazar datos utilizando ADO.NET de manera directa.Ejemplo en C#

    using( SqlConnection cn = new SqlConnection("....") )

    {

    cn.Open();

    SqlDataAdapter da = new SqlDataAdapter("Select * from Employee", cn);

    DataTable dt = new DataTable();

    da.Fill(dt);

    this.dataGridView1.DataSource = dt;

    }

    Para mayor informacin sobre ADO.NET 2.0 refirase al material de la Estrella 1.

  • ADO .NET (2/2)

    Ejemplo en Visual Basic

    Dim cn As SqlConnection = New SqlConnection("....")

    Try

    cn.Open

    Dim da As SqlDataAdapter = New _

    SqlDataAdapter("Select * from Employee", cn)

    Dim dt As DataTable = New DataTable

    da.Fill(dt)

    Me.dataGridView1.DataSource = dt

    Finally

    cn.Close

    End Try

  • Temario (2/2)

    ConfiguracinDilogos comunesEnlace a datosDistribucin de la aplicacinClick OnceReferencias
  • Distribucin de la aplicacin

    La distribucin de una aplicacin Windows involucra varios pasos de cierta complejidad dependiendo de sus requerimientos..NET 2.0 incorpora ClickOnce, una tecnologa que permite la distribucin de la aplicacin, versionado y rollback, entre otras funciones.Es posible:Decidir donde ser instalada fsicamente.Especificar la frecuencia de revisin de actualizaciones.Forzar actualizaciones crticas.Publicar actualizaciones en Servidores Web, Servidores de archivo (File Servers) o Servidores FTP.

    La instalacin de las aplicaciones Windows de escritorio en varios puestos de trabajo, siempre presentaron inconvenientes. El framework .NET 2.0 incorpora la tecnologa ClickOnce que permite la fcil distribucin de estas aplicaciones

    Una vez que la aplicacin ha sido desarrollada y testeada, se publica en un servidor de distribucin. Este paso involucra simplemente copiar todos los archivos de la aplicacin previamente compilada en una carpeta en un servidor Web o un servidor de archivos. Junto con estos archivos se debe copiar el manifiesto de distribucin (deployment manifest) que describe el proceso de distribucin para ClickOnce.

    Una vez que los archivos han sido publicados, se suministra al usuario un enlace (hipervnculo URL o atajo) que apunta al manifiesto de distribucin. Cuando un usuario hace click en ese enlace, el CLR de la mquina cliente reconoce la extensin del archivo manifiesto y ejecuta una distribucin de ClickOnce de la aplicacin, descargando (download) y ejecutando la aplicacin en la mquina del usuario. La prxima vez que se ejecute la aplicacin, si no hay una nueva versin en el servidor, el CLR la ejecutar directamente desde su copia local, caso contrario se encargar de descargar los componentes necesarios para actualizar localmente la nueva versin de aplicacin.

    ClickOnce est pensado para distribuir aplicaciones Windows que constituyan simplemente la capa de presentacin del usuario (UI). No es un reemplazo de Windows Installer (MSI), ni es conveniente para todo los tipos de aplicaciones.

    Si en el proceso de instalacin de una aplicacin se necesitan privilegios especiales que pueden afectar a otras aplicaciones de la mquina en la que se quiere instalar, o se requieren permisos irrestrictos al sistema de archivos, o accesos al registro de Windows, la aplicacin no es candidata a ser distribuida mediante ClickOnce.

  • Temario (2/2)

    ConfiguracinDilogos comunesEnlace a datosDistribucin de la aplicacinReferencias
  • Referencias Adicionales

    Windows Forms:http://windowsforms.nethttp://samples.gotdotnet.com/quickstart/winforms/ http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemwindowsforms.asp http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/vbcon/html/vbconintroductiontowfcforms.asp
  • Referencias Adicionales

    Smart Client Developer Centerhttp://msdn.microsoft.com/smartclient/understanding/windowsforms/default.aspx ClickOnce:http://msdn.microsoft.com/msdnmag/issues/04/05/ClickOnce/