Cursos subvencionados para trabajadores
Realiza el curso gratis a través de tu empresa.
Cursos SubvencionadosUna colección es una lista de objetos o elementos que están agrupados en un objeto, en este caso un objeto colección (o Collection). Items es una colección de elementos, es decir los elementos están guardados en una "lista" de datos. Normalmente trabajaremos con muchos tipos de colecciones: los iconos de la barra de herramientas es una colección de objetos botón, las impresoras instaladas en nuestro ordenador es una colección de objetos impresora, un libro de trabajo de Excel es una colección de hojas de cálculo...
Ya hemos añadido un elemento a la lista, si seguimos pulsando en añadir vemos como vamos creando la lista con todos estos elementos... Veamos ahora cómo saber cual es el elemento que se ha seleccionado de la lista y cómo asignarlo al TextBox. Es decir, el usuario selecciona un elemento y queremos que se escriba en el cuadro de texto. Mira este código
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
' Cuando pulsamos en un elemento de la lista...
With ListBox1
TextBox1.Text = listbox1.SelectedItem
End With
End Sub
Fíjate que en este caso no es el evento Clic, como era de esperar (y como es en las versiones anteriores de VB) sino que el evento en cuestión es SelectedIndexChanged.
Ya te he comentado que lo que podemos añadir a los elementos del listbox son objetos, pero lo que a nosotros nos interesa mostrar es el "texto" de dicho elemento, ya que no nos interesa otra cosa, más que nada porque lo que hemos añadido son textos y no objetos.
Lo que en este evento hacemos es asignar a la caja de textos el texto del elemento seleccionado: la propiedad SelectedItem representa al elemento seleccionado. Tranquilo lo veremos mas adelante... además ¿qué esto del With... End With? Esto si que lo explico porque es sencillo. Cuando estamos trabajando con varias propiedades de un control u objeto (cuadro de lista en este caso) podemos hacerlo de esta forma:
TextBox1.Text = Listbox1.SelectedItem
Es decir, le indicamos el método o propiedad de control separado por un punto. Pero en ocasiones escribiremos muchas instrucciones sobre ese cuadro de lista... para evitar escribir tantas veces el objeto con el que estamos trabajando podemos utilizar la instrucción with...end with
With ListBox1
TextBox1.Text = .SelectedItem
End With
Que significa: "con el cuadro de lista Listbox1" haz lo siguiente... y cuando se encuentre una propiedad con el punto delante .SelectedItem sabe que debe ser del control que se indicó en el with. Es un poco para simplificar la sintaxis, la utilidad no va mas allá de hacer el código mas legible y puede omitirse tranquilamente su utilización y escribir en su lugar el objeto completo.
Mas cosas... ¿y de dónde he sacado yo este evento?... ListBox1_SelectedIndexChanged
Inscríbete ahora y accede a 3 unidades gratis
Evalua el curso de Visual Basic .NET y accede a las 3 unidades gratis con acceso completo al aula virtual donde podrás disfrutar de la inestimable ayuda del tutor y una gran variedad de recursos como videotutoriales, ejercicios resueltos, foros, enlaces, bibliografía, etc....
Para poder usar otros eventos de un objeto, debemos realizar esto en la ventana de código. Primero seleccionamos de la lista desplegable de la izquierda el objeto con el que queremos trabajar, en nuestro caso el cuadro de lista. Automáticamente se actualiza un desplegable a la derecha con los eventos disponibles para este objeto:

Vemos en esta pantalla que a la izquierda está seleccionado el cuadro de lista List1 y a la derecha aparecen todos los eventos disponibles para este cuadro de lista.
| Nota: Cada control tiene sus propios eventos. Muchos son comunes, por ejemplo el evento clic está disponible en casi todos pero el que estamos utilizando que nos indica qué elementos está seleccionado en un cuadro de lista es propio sólo de estos controles. |
Para trabajar con el evento que queremos desplegaremos la lista de la derecha y seleccionamos el adecuado. No te preocupes nunca nos tendremos que aprender esa lista de eventos. En general nunca hay que aprenderse nada, hay que conocer las cosas y luego tener una buena referencia o ejemplos para utilizarlos. Además de toda esa lista de eventos no utilizaremos mas que un par de ellos, y eso con todos los controles.
Inscríbete ahora y accede a 3 unidades gratis
Evalua el curso de Visual Basic .NET y accede a las 3 unidades gratis con acceso completo al aula virtual donde podrás disfrutar de la inestimable ayuda del tutor y una gran variedad de recursos como videotutoriales, ejercicios resueltos, foros, enlaces, bibliografía, etc....
En el ejemplo anterior hemos controlado que hacer cuando el usuario hace clic con el ratón en un elemento de la lista, ahora vamos a controlar que hacer con determinadas teclas. Para esto vamos a utilizar el evento que controla cuando se pulsan las teclas: el evento KeyPress,
Seguimos con el ejemplo anterior, vamos a la pantalla del código, arriba a la izquierda seleccionamos el cuadro de lista y a la derecha buscamos el evento Keydown:

El procedimiento que nos escribirá debajo es:
Private Sub ListBox1_KeyDown(ByVal sender As Object, ByVal e As _ System.Windows.Forms.KeyEventArgs) Handles ListBox1.KeyDown End Sub
Pero si hemos dicho de utilizar el Keypress ¿porqué he cogido ahora el KeyDown?. Bien, veamos los eventos que tenemos para manejar el teclado:
¿Y para que tanto control sobre las teclas? Pues si, cada uno de estos eventos tiene su utilidad. Por ejemplo el Keypress digamos que es el "normal", cuando se presiona una tecla normalmente y se suelta, pero ¿y si queremos utilizar dos teclas simultáneas? Debemos saber si está la primera tecla pulsada, vale pues con KeyDown nos funcionará bien. Además existen muchas teclas especiales que sólo funcionan con KeyDown como es el caso de la tecla Supr (Del) es una tecla especial y no se detecta en el evento KeyPress. Podía haber usado KeyUp también, pero ese evento se produce cuando se suelta la tecla... (que sería lo lógico), pero es otra forma de hacer las cosas: interceptando las pulsaciones en el evento KeyDown (cuando se empieza a pulsar la tecla) .
Luego ya sabemos cómo detectar cuando se pulsa la tecla suprimir (Del), ahora debemos borrar el elemento de la lista que esté activo o seleccionado:
Private Sub ListBox1_KeyDown(ByVal sender As Object, ByVal e As _
System.Windows.Forms.KeyEventArgs) Handles ListBox1.KeyDown
If e.KeyCode = Keys.Delete Then
With ListBox1
.Items.Remove(.SelectedItem)
End With
End If
End Sub
Aunque haya unas cuantas cosas nuevas la explicación es la siguiente: cuando se ejecuta este procedimiento una variable llamada "e" indica el código de la tecla que se ha pulsado. La comparamos entonces para ver si la tecla de suprimir: e.KeyCode = Keys.Delete. Si es así, eliminamos el elemento que está seleccionado.
La variable "e" está en la definición del evento de este cuadro de lista:
Private Sub ListBox1_KeyDown(ByVal sender As Object, ByVal e As _ System.Windows.Forms.KeyEventArgs) Handles ListBox1.KeyDown
Cada evento según sea su naturaleza nos proporcionará cierta información, está claro que si estamos seleccionando el evento de pulsar una tecla "KeyDown" nos tendría que decir que tecla es la pulsada. Pues si, lo dice y en el parámetro de entrada:
ByVal e As System.Windows.Forms.KeyEventArgs
Que nos dice que nos proporciona una variable que se llama "e" que es de tipo "KeyEventArgs", es decir, de tipo evento de teclado o tecla
Recuerda que SelectedItem nos indica el elemento que actualmente está seleccionado y usando el método Remove de la colección Items, lo quitamos de la lista.
Repito que todo esto es para practicar, de momento vamos un poco a ciegas hasta que aprendamos mas de VB .NET pero trasteando con el IDE y ejecutando estos ejemplos vamos cogiendo un poco de práctica...
Inscríbete ahora y accede a 3 unidades gratis
Evalua el curso de Visual Basic .NET y accede a las 3 unidades gratis con acceso completo al aula virtual donde podrás disfrutar de la inestimable ayuda del tutor y una gran variedad de recursos como videotutoriales, ejercicios resueltos, foros, enlaces, bibliografía, etc....
Para ir terminando con este capítulo vamos a manejar varias cosas mas de los eventos y de los cuadros de lista. Ahora queremos hacer una selección múltiple de un cuadro de texto y suprimir todos los que estén seleccionados. Con lo que sabemos tenemos ya una idea de cómo hacerlo pero nos falta alguna cosa, veamos...
Una selección múltiple (seleccionar varios elementos a la vez de una lista) es algo habitual y que debemos tener en cuenta en nuestros programas. Cuando permitimos múltiple selección en un cuadro de lista (ListBox) , podemos seleccionar un elemento o varios, en este caso éstos pueden estar consecutivos o no. Por ejemplo, si seleccionas un elemento de la lista y manteniendo pulsada la tecla Shift (mayúsculas), pulsas en otro que está más arriba o más abajo, se seleccionan todos los elementos intermedios, (esto es una cosa habitual de Windows); también puedes seleccionar elementos no contiguos, si pulsas la tecla Control y con el ratón vas haciendo clic en elementos no consecutivos.
Lo primero que necesitamos saber es:
¿Cómo hacer que un ListBox permita múltiple selección? ya que por defecto sólo se puede seleccionar un elemento a un mismo tiempo.
Para que un ListBox permita múltiple selección de elementos, hay que asignar a la propiedad SelectionMode el valor MultiExtended, por tanto selecciona el cuadro de lista ListBox1 y en la ventana de propiedades, asigna dicho valor a la propiedad SelectionMode.

Ahora tenemos que hacer más cosas cuando se detecta la pulsación de la tecla suprimir en el evento KeyDown, ya que tenemos que saber qué elementos están seleccionados para poder borrarlos. Es decir, de alguna manera debemos saber qué elementos están seleccionados.
Lo primero que tenemos que hacer es recorrer todos los elementos del ListBox para saber si está o no seleccionado, pero ese recorrido hay que hacerlo desde atrás hacia adelante... ¿por qué? porque si lo hiciéramos desde el principio de la lista, al eliminar un elemento de dicha lista, el número de elementos variaría y tendríamos problemas cuando llegásemos al final, ya que no será el mismo número de elementos después de haber borrado alguno... mientras que al recorrer los elementos desde el final hacia adelante, no importará que borremos alguno del final, ya que el siguiente que comprobaremos estará más al principio que el recién borrado y no tendremos problemas... tranquilo, lo veremos funcionando
Veamos primero el código que habría que usar y después lo comento.
Private Sub ListBox1_KeyDown(ByVal sender As Object, ByVal e _
As System.Windows.Forms.KeyEventArgs) Handles ListBox1.KeyDown
If e.KeyCode = Keys.Delete Then
' Borrar las palabras seleccionadas del listbox
Dim i As Integer
With ListBox1
For i = .SelectedItems.Count - 1 To 0 Step -1
.Items.Remove(.SelectedItems.Item(i))
Next
End With
End If
End Sub
La parte del If e.KeyCode = Keys.Delete Then ya la vimos antes, aunque no te expliqué qué es lo que significa esto (mas o menos)
Dim i As Integer esto le indica al VB que vamos a usar un número y que ese número lo guarde en la variable i, esto lo veremos con mas detalle mas adelante.
With ListBox1 el With se utiliza para simplificarnos las cosas, ya lo comentamos antes.
Ahora resulta que Visual Basic me dice los elementos que están seleccionado: bien. Esto será de gran ayuda, así que me va a dar una colección (recuerda el término de colección) con los elementos que ha seleccionado el usuario. Además una cosa nueva en todas las colecciones y es que tienen una propiedad llamada Count que me dice cuantos elementos hay en esa colección. Pues bien si hacemos:
For i = .SelectedItems.Count - 1 To 0 Step -1 le estamos indicando que use la variable i para ir guardando los valores que resulten de contar desde el número de elementos que hay seleccionados hasta cero. El Step -1 se usa para contar hacia atrás, (de mayor a menor), pero eso, al igual que el For, también lo veremos más adelante.
SelectedItems es una colección en la que están los elementos que hay seleccionados en el ListBox. ¿Recuerdas la colección Items? Pues en este caso, SelectedItems son los elementos seleccionados.
.Items.Remove(.SelectedItems.Item(i)) Esto es parecido a lo visto antes, es decir, elimina el elemento que está seleccionado y que ocupa la posición i dentro de la colección de elementos seleccionados.
Next indica que continúe el bucle o la cuenta que estamos llevando con la variable i. De esta forma, al haber usado el Step -1, lo que hacemos es contar hacia atrás y si por ejemplo i valía 3, al llegar aquí, valdrá 2, es decir restamos 1: el valor indicado en Step
End With indica hasta dónde llega el tema este del With ListBox1
End If le dice que hasta aquí llega la comprobación que hicimos de si la tecla pulsada era la de suprimir.
Recuerdo un poco otra vez que esto del with (insistiendo seguro que acabas aprendiéndolo)
Por tanto, si usamos With Objeto, podemos sustituir a Objeto por el punto, siempre y cuando ese punto, (y la propiedad o método correspondiente), esté dentro del par With... End With.
Seguramente preferirás usarlo de esta otra forma, ya que se ve "claramente" que es lo que estamos haciendo, pero con el tiempo te acostumbrarás a usar With/End With.
Nos queda decirle al formulario que cuando se pulse el botón de aceptar haga lo mismo que si pulsamos el botón de Añadir. Para esto nos vamos al diseñador y buscamos la siguiente propiedad:

Esto es qué debe hacer cuando se pulse el botón Intro. Pues bien nosotros lo queremos asociar con un botón de los que hemos puesto nosotros: Añadir. Al pinchar en este desplegable el entorno es lo suficientemente inteligente como para mostrarme la lista botones que tengo en mi formulario: selecciono entonces cmdAdd.
Veamos ahora cómo le asociamos que al pulsar la tecla escape (Esc) termine el formulario. Para esto cambiamos la propiedad CancelButton.
Por tanto, selecciona de la lista desplegable el botón cmdCerrar y así al pulsar Esc se cerrará la aplicación.
Probemos ahora todo el código y así lo comprobarás: Escribe algo en el cuadro de texto y pulsa Intro, verás que se añade a la lista, después pulsa ESC y verás que se cierra el formulario o ventana con lo que se da por terminada la aplicación.
Este ejemplo lo tienes aquí comprimido para descargar por si te has liado mucho y lo quieres ver completo.
En el siguiente capítulo veremos con detalle toda el IDE de .NET para comenzar a ver ya las características del código .NET. Veremos las partes en que se compone la interfaz y las ventanas de ayuda y depuración.
Inscríbete ahora y accede a 3 unidades gratis
Evalua el curso de Visual Basic .NET y accede a las 3 unidades gratis con acceso completo al aula virtual donde podrás disfrutar de la inestimable ayuda del tutor y una gran variedad de recursos como videotutoriales, ejercicios resueltos, foros, enlaces, bibliografía, etc....
Copyright 2008© ADRInfor S.L. Logroño | Tel: 941250116 Fax: 941236805 | Email | Politica de Privacidad