4.-Controles Avanzados

11
1 4. APLICACIONES PARA WINDOWS. CONTROLES AVANZADOS CONTROL Panel En un formulario podemos agrupar controles utilizando el control Panel. Controlando la visualización o no del control Panel, los controles que contiene se pueden mostrar y ocultar dentro del formulario. El control Panel es similaral control GroupBox, pero se diferencias en que el control Panel puede tener barras de desplazamiento y el GroupBox puede mostrar un título. CONTROL TreeView El control TreeView de formularios Windows Forms permite mostrar y controlar una jerarquía de nodos en un formulario. La estructura de nodos se visualiza de forma similar a la que representa la estructura de carpetas del Explorador de Windows. Cada nodo de la vista de árbol podría contener otros nodos, llamados nodos secundarios. Propiedades del control TreeView : a) La propiedad ImageIndex determina la imagen que se muestra para los estados normal y expandido del nodo, y la propiedad SelectedImageIndex determina la imagen que se muestra para el estado seleccionado del nodo. El control utiliza las imágenes de otro control llamado ImageList. b) Si se establece la propiedad CheckBoxes de la vista de árbol en true, el árbol se mostrará con casillas de verificación junto a los nodos. Entonces, es posible activar o desactivar nodos mediante programación estableciendo la propiedad Checked del nodo en true o false. c) La propiedad Nodes contiene una colección de objetos TreeNode que representa los nodos raíz del control. d) La propiedad Nodes contiene el método Clear() que permite borrar los elementos de la colección. Cada nodo de un control TreeView está representado por un objeto TreeNode. Se puede construir un objeto TreeNode pasándole un string con el nombre del nodo, por ejemplo: new TreeNode (nombreNodo) PARA ESTABLECER IMÁGENES: ImageList El control ImageList permite establecer las imágenes que podrán ser fuente para el control TreeView En la barra de herramientas de los controles “Todos los formularios Windows Forms” seleccionar el control . Este control se deberá introducir en el formulario y la

Transcript of 4.-Controles Avanzados

Page 1: 4.-Controles Avanzados

1

4. APLICACIONES PARA WINDOWS. CONTROLES AVANZADOS

CONTROL Panel

En un formulario podemos agrupar controles utilizando el control Panel. Controlando la visualización o no del control Panel, los controles que contiene se pueden mostrar y ocultar dentro del formulario.

El control Panel es similaral control GroupBox, pero se diferencias en que el control Panel puede tener barras de desplazamiento y el GroupBox puede mostrar un título.

CONTROL TreeView

El control TreeView de formularios Windows Forms permite mostrar y controlar una jerarquía de nodos en un formulario. La estructura de nodos se visualiza de forma similar a la que representa la estructura de carpetas del Explorador de Windows. Cada nodo de la vista de árbol podría contener otros nodos, llamados nodos secundarios.

Propiedades del control TreeView:

a) La propiedad ImageIndex determina la imagen que se muestra para los estados normal y expandido del nodo, y la propiedad SelectedImageIndex determina la imagen que se muestra para el estado seleccionado del nodo. El control utiliza las imágenes de otro control llamado ImageList.

b) Si se establece la propiedad CheckBoxes de la vista de árbol en true, el árbol se mostrará con casillas de verificación junto a los nodos. Entonces, es posible activar o desactivar nodos mediante programación estableciendo la propiedad Checked del nodo en true o false.

c) La propiedad Nodes contiene una colección de objetos TreeNode que representa los nodos raíz del control.

d) La propiedad Nodes contiene el método Clear() que permite borrar los elementos de la colección.

Cada nodo de un control TreeView está representado por un objeto TreeNode. Se puede construir un objeto TreeNode pasándole un string con el nombre del nodo, por ejemplo: new TreeNode (nombreNodo)

PARA ESTABLECER IMÁGENES: ImageList

El control ImageList permite establecer las imágenes que podrán ser fuente para el control TreeView

En la barra de herramientas de los controles “Todos los formularios Windows Forms”

seleccionar el control . Este control se deberá introducir en el formulario y la

Page 2: 4.-Controles Avanzados

2

aplicación permitirá su inclusión en un lugar reservado para los controles que no son visibles en el formulario (en la parte inferior).

Para introducir imágenes en el control ImageList se debe acceder a la propiedad Images del control

En la ventana que se muestra al activar la propiedad Images existe el botón Agregar que nos permitirá incluir imágenes en el control ImageList para, posteriormente, enlazarlas con el control TreeView

El control TreeView dispone de la propiedad ImageList que permite seleccionar un control ImageList previamente creado para utilizar sus imágenes.

Las imágenes del control ImageList estarán disponibles para utilizarse en el control TreeView de la siguiente manera.

a) Utilizando la ventana Propiedades estableciendo las propiedades ImageIndex () y SelectedImageIndex ( ) del nodo. La propiedad

ImageIndex determina la imagen que se muestra para los estados normal y expandido del

Page 3: 4.-Controles Avanzados

3

nodo, y la propiedad SelectedImageIndex determina la imagen que se muestra para el estado seleccionado del nodo.

b) Utilizando el código.

TreeView1.ImageList = ImageList1

TreeView1.ImageIndex()=0

TreeView1.SelectecImageIndex=1

PRÁCTICA

Este proyecto debe permitir seleccionar ficheros de imagen almacenados en cualquier unidad/carpeta de nuestro equipo para su visualización. Para ello será necesario utilizar un formulario que contenga los siguientes controles:

1. Un ComboBox que permita seleccionar la unidad que se quiere explorar.

2. Un TreeView que nos permita recorrer la estructura de carpetas de la unidad seleccionada en el ComboBox

3. Un ListView que muestre y permita seleccionar los ficheros de imagen que contiene la carpeta seleccionada en el TreeView.

4. Un control PictureBox que muestre la imagen del fichero seleccionado en el LIstView.

5. Dos controles RadioButton (puedes utilizar para ello un control GroupBox). Cuando el usuario selecciona un botón de opción dentro de un grupo, los otros se borran automáticamente. Todos los controles RadioButton de un contenedor determinado, como Form, constituyen un grupo. Para crear varios grupos en un formulario, coloque cada grupo en su propio contenedor, como un control GroupBox o Panel.

Al final se mostrará un formulario similar al siguiente

Page 4: 4.-Controles Avanzados

4

DESARROLLO DEL PROYECTO 1. Crear un nuevo proyecto llamado Control_TreeView y guardarlo en la carpeta reservada para los proyectos de clase

2. Crear un formulario llamado Ver_Imagenes.vb

3. Introducir en el formulario un control ComboBox (cboxSeleccionarUnidad), el control TreeView (treeVSeleccionarCarpeta), el control ListView (listVSeleccionarImagen), el control PictureBox (picImagen) y los controles RadioButton (rbtAjustar, rbtMantener).

4. Crear el método adecuado para que cuando se cargue el formulario, el control cboxSeleccionarUnidad cargue las unidades del equipo.

Se debe conseguir que al cargar el formulario (evento Load) se cargue en el ComboBox las unidades existentes en nuestro equipo, para ello se deben utilizar las siguientes instrucciones

i. Definir un array de objetos String Dim sUnidades() As String

ii. Cargar en el array sUnidades()las unidades lógicas del equipo, esta operación se logra utilizando el método System.Environment.GetLogicalDrives()que devuelve un array de String que contiene las unidades lógicas del equipo. sUnidades = System.Environment.GetLogicalDrives()

iii. Cargar el array sUnidades() en la colección de Items del ComboBox. Para agregar una lista de elementos a un control ComboBox se debe pasar por

Page 5: 4.-Controles Avanzados

5

parámetro una array de string con los elementos a la colección Items mediante el métod AddRange(). Me.cboxSeleccionarUnidad.Items.AddRange(sUnidades)

Probar el buen funcionamiento de la carga del ComboBox ejecutando el proyecto

5. Crear el método adecuado para que al seleccionar una unidad del equipo se muestre su estructura de carpetas en el control treeVSeleccionarCarpeta.

Para realizar esta operación se debe detectar en el evento SelectedIndexChanged del control cboxSeleccionarUnidad. Este evento se dispara cuando se cambia el elemento seleccionado en el control ComboBox.

CONOCIMIENTOS PREVIOS:

Objeto DirectoryInfo pertenece al espacio de nombres System.IO1

El objeto DirectoryInfo representa un directorio del sistema.

El constructor de la clase DirectoryInfo permite determinar el directorio que se quieren manipular pasando el String de su nombre por parámetro. Por ejemplo, la instrucción Dim objeto as New DirectoryInfo(Nombre_Carpeta_Tipo_String)

crea un objeto de la clase DirectoryInfo que contiene la carpeta y las subcarpetas que dependen de Nombre_Carpeta_Tipo_String Los objetos DirectoryInfo disponen del método GetDirectories() que devuelve un array con los nombres de los subdirectorios de la carpeta que hace referencia. También disponen de la propiedad FullName que muestra el nombre del directorio que hace referencia. Pasos para crear el método que responde al evento SelectedIndexChanged del control cboxSeleccionarUnidad.

a) Crear un objeto de la clase DirectoryInfo que contenga la carpeta raíz de la unidad previamente seleccionada. La carpeta raíz de la unidad seleccionada estará en la propiedad Text del objeto cboxSeleccionarUnidad. Dim oDirUnidadSelec As New DirectoryInfo(Me.cboxSeleccionarUnidad.Text)

b) Definir un array de objetos DirectoryInfo Dim sDirectorios() As DirectoryInfo

1 Para acceder desde el código de una aplicación, a una clase contenida dentro de un espacio de nombre, debemos indicarlo en la aplicación realizando una operación que en VB.NET se denomina Importar. Existen dos medios para importar un espacio de nombre: usar la palabra clave Imports en la cabecera del módulo de código junto al nombre del namespace y clase a la que queremos acceder (Imports System.IO, después en cualquier código del módulo podemos hacer referencia a cualquiera de sus clases como DirectoryInfo); o bien usar la descripción completa en cada momento que necesitemos hacer referencia a la clase System.IO.DirectoryInfo.

Page 6: 4.-Controles Avanzados

6

c) Asignar al array sDirectorios() el conjunto de subdirectorios perteneciente al objeto oDirUnidadSelec.

sDirectorios = oDirUnidadSelec.GetDirectories()

d) Vaciar el control TreeView para cargarlo con nueva información

Me.treeVSeleccionarCarpeta.Nodes.Clear()

e) Cargar el control TreeView con las carpetas seleccionadas. Para ello será necesario utilizar:

- una variable del tipo DirectoryInfo que ejercerá un papel de control en la instrucción FOR.

Dim oDirInfo As DirectoryInfo - una variable del tipo TreeNode para tomar cada una de las carpetas almacenadas en el array sDirectorios(), convertirla en un nodo y añadirla a la colección Nodes del control treeVSeleccionarCarpeta mediante el método Add.

Dim oNodo As TreeNode For Each oDirInfo In sDirectorios oNodo = New TreeNode(oDirInfo.FullName) Me.treeVSeleccionarCarpeta.Nodes.Add(oNodo) Next 6. Crear, para el control treeVSeleccionarCarpeta, el método que responda al evento AfterSelect. Este método debe desplegar las subcarpetas de la carpeta elegida y mostrar los ficheros solicitados, si es que los contiene. Para ello se deben seguir los siguientes pasos.

a) Se debe acceder al directorio que se ha seleccionado y asignarlo a un objeto DirectoryInfo para poder manipularlo desde el código. Para realizar esta operación se define un objeto del tipo DirectoryInfo y se asigna al objeto creado la información sobre el nodo que ha sido seleccionado. La información sobre el nodo seleccionado se puede obtener a partir del parámetro e del método. Este parámetro siempre tiene información sobre el evento, en este caso, permite obtener información sobre el nodo que se ha seleccionado en el TreeView, es decir, sobre la carpeta seleccionada (e.Node.FullPath contiene el nombre de la carpeta que ha sido seleccionada).

Dim oSubDirInfo As DirectoryInfo oSubDirInfo = New DirectoryInfo(e.Node.FullPath)

b) Se deben obtener los subdirectorios de la carpeta seleccionada. Para ello se utiliza un array de objetos DirectoryInfo y se le asigna el conjunto de subdirectorios que posee el objeto que representa la carpeta seleccionada.

Dim oSubDirectorios() As DirectoryInfo oSubDirectorios = oSubDirInfo.GetDirectories()

c) Se debe eliminar los posibles subdirectorios del nodo actual por si ya estaban dibujados anteriormente.

e.Node.Nodes.Clear()

d) Se deben crear los nodos para el subdirectorio seleccionado en el TreeView.

Page 7: 4.-Controles Avanzados

7

Dim oSubDirI As DirectoryInfo Dim oNodo As TreeNode For Each oSubDirI In oSubDirectorios oNodo = New TreeNode(oSubDirI.Name) e.Node.Nodes.Add(oNodo.Text) Next

e) Se sebe obtener los archivos del subdirectorio.

CONOCIMIENTOS PREVIOS:

El objeto FileInfo contiene información de un fichero. Contiene la propiedad Extension de tipo string que contiene la extensión del fichero.

Hay que definir un array de tipo FileInfo que contendrá todos los ficheros pertenecientes a una carpeta (instancia oSubDirInfo del objeto DirectoryInfo)

Dim oArchivos() As FileInfo oArchivos = oSubDirInfo.GetFiles()

f) Hay que limpiar el objeto ListView.

CONOCIMIENTOS PREVIOS:

El objeto ListView contiene una colección llamada Items que se puede limpiar con el método Clear()

Me.listVSeleccionarImagen.Items.Clear()

g) Por último, es necesario rellenar el ListView con los nombres de archivo que tengan tipo gráfico

Dim oArchInfo As FileInfo For Each oArchInfo In oArchivos Select Case oArchInfo.Extension.ToUpper() Case ".BMP", ".PNG", ".WMF", ".JPG", ".JPEG", ".GIF" Me.listVSeleccionarImagen.Items.Add(oArchInfo.Name) End Select Next

6. Se debe crear un método que responda al evento SelectedIndexChanged del control ListView para actualizar el control PictureBox cada vez que se selecciona un fichero distinto. Para conseguir esta acción se puede utilizar el método Invalidate() del control del formulario picImagen.

7. Por último se debe controlar el evento Paint del objeto pictureBox para determinar la forma en que ser muestra la imagen en el control. En este ejemplo se aporta el código, así que lo que debes hacer es documentar cada una de las líneas de que se compone el método.

Private Sub picImagen_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles picImagen.Paint If Not (IsNothing(Me.treeVSeleccionarCarpeta.SelectedNode)) And (Me.listVSeleccionarImagen.SelectedIndices.Count <> 0) Then Dim oBitmap As New Bitmap( _ Me.treeVSeleccionarCarpeta.SelectedNode.FullPath & _ "\" & Me.listVSeleccionarImagen.SelectedItems(0).Text) ' obtener dispositivo gráfico del picturebox Dim oGraf As Graphics = e.Graphics If Me.rbtAjustar.Checked Then

Page 8: 4.-Controles Avanzados

8

oGraf.DrawImage(oBitmap, 0, 0, _ Me.picImagen.Size.Width, Me.picImagen.Size.Height) Else oGraf.DrawImage(oBitmap, 0, 0, _ oBitmap.Size.Width, oBitmap.Size.Height) End If End If End Sub

8. Ejecuta el proyecto y comprueba errores.

MEJORAS POSIBLES

1. Consigue que la imagen que está en pantalla cambie directamente al pulsar el checkbox de Ajustar o Mantener.

2. Realiza el control de excepciones en el caso de que se seleccione una unidad de cd-rom vacía.

3. Modifica la propiedad View del control ListView y prueba a ver los ficheros de imagen de diferentes fromas.

4. Utilizar un control Panel para ocultar el control PictureBox y RadioButton mientras no se seleccione una imagen concreta

5. Crear un menú contextual que contenga entradas para Ajustar y Mantener la imagen

LA CLASE DateTime

La clase DateTime representa una fecha y una hora concreta. Sus posibles valores están comprendidos entre la medianoche (00:00:00) del 1 de enero de 0001 d.C. y las 23:59:59 del 31 de diciembre de 9999 d.C.

Constructor

System.DateTime(año,mes,día)

Ejemplo:

Dim fecha as New DateTime(2010,11,14)

Campos/Propiedades

• MaxValue: Representa el mayor valor posible. • MinValue: Representa el valor mínimo posible. • Date: Devuelve la parte correspondiente a la fecha de la instancia. • Now: Devuelve un entero que representa la hora actual como un objeto

DateTime. • Year: Devuelve el año correspondiente a la instancia. • Day: Devuelve el día correspondiente a la instancia. • Moth: Devuelve el mes correspondiente a la instancia. • DayOfWeek: Devuelve el día de la semana correspondiente a la instancia (0-

domingo, 1-lunes, etc)

Page 9: 4.-Controles Avanzados

9

• Hour: Devuelve la hora correspondiente a la instancia. • Minute: Devuelve los minutos correspondiente a la instancia • Second: Devuelve los segundos correspondiente a la instancia.

Métodos de instancia

• AddDays/AddMonths/AddYears: Suma un número de días/mes/años a la instancia DateTime.

• AddHours/AddMinutes/AddSeconds: Suma un número de horas/minutos/segundos a la instancia DateTime.

• DaysInMonth: Devuelve el número de días del més año indicados. • ToShortDateString/ToLongDateString: convierte el valor de la instancia en la

fecha en formato corto/largo2

Métodos compartidos o estáticos

.

• Parse (string): convierte la cadena en formato de fecha en un tipo DateTime, siendo el dato string una cadena del tipo “dd/mm/aaaa” o “dd/mm/aaaa, hh:ss”.

EL CONTROL DateTimePicker

El control DateTimePicker permite al usuario introducir valores del tipo DateTime. Este control presenta un aspecto similar a un ComboBox cuando se introduce en el formulario.

Al pulsar sobre la flecha que hay a la derecha del control DateTimePicker se despliega un calendario similar al siguiente

2 Fecha en formato corto: 11/10/2010. Fecha en formato largo lunes, 11 de octubre de 2010

Page 10: 4.-Controles Avanzados

10

En el calendario podemos cambiar de mes y seleccionar la fecha deseada con sólo pulsar un click sobre el día correspondiente.

Es posible limitar las fechas a visualizar mediante las propiedades MaxDate y MinDate.

La propiedad Text obtiene o establece una cadena con el valor que aparece en el control.

La propiedad Value obtiene o establece un valor de tipo DateTime.

La propiedades Day, Month, Year, DayOfWeek, Hour, Minute, Second y Millisecond devuelven las partes de la fecha.

La propiedad Format permite establecer el formato de fecha y hora que se visualiza.

Es posible mostrar un control para seleccionar horas marcando la propiedad ShowUpDown a True y Format a Time.

CONTROL MonthCalendar

El control MonthCalendar nos facilita la entrada de fechas en el sistema y permite asegurarnos, que la fecha seleccionada es una fecha válida. Este control permite seleccionar varios días a la vez.

Cuando insertamos un control MonthCalendar en el formulario tiene el siguiente aspecto:

Page 11: 4.-Controles Avanzados

11

Para configurar el aspecto del calendario se pueden utilizar las propiedades ShowToday, ShowTodayCircle, ShowWeekNumbers.

De manera predeterminada, el domingo se muestra como el primer día de la semana, pero se puede designar cualquier día utilizando la propiedad FirstDayOfWeek.

Para saber el rango de días seleccionado utilizamos las propiedades: SelectionStart y SelectionEnd que devuelven la fecha inicial y final de la selección. Si se ha seleccionado solo un día el valor de estas propiedades es la misma.

PRÁCTICA

Hacer un proyecto para que el usuario introduzca sus datos personales (nombre, apellidos, fecha de nacimiento, sexo, etc) y deben existir botones para:

• Mostrar los años que tiene • Su signo del zodíaco