Usando el control ListBox

[Aprende a manejar las colecciones: ListBox.ObjectCollection, ListBox.SelectedObjectCollection y ListBox.SelectedIndexCollection ]

Fecha: 07/03/2005
Autor: Arbis Percy Reyes Paredes - Perxindrome [email protected]

 

 

Un control ListBox de formularios Windows Forms muestra una lista de elementos de los cuales el usuario puede seleccionar uno o más. Si el número total de elementos supera el número que se puede mostrar, se agrega automáticamente una barra de desplazamiento al control ListBox.

' Use el siguiente código para crear una instancia de un control ListBox.

 Dim listBox1 As New ListBox

' ....

'  ...después de agregar los atributos necesarios

 ' Debe agregar el ListBox al form.

 Me.Controls.Add(listBox1)

Cuando la propiedad MultiColumn se establece en true, el cuadro de lista muestra elementos en varias columnas y aparece una barra de desplazamiento horizontal. Cuando la propiedad MultiColumn se establece en false, el cuadro de lista muestra elementos en una única columna y aparece una barra de desplazamiento vertical. Cuando ScrollAlwaysVisible se establece en true, la barra de desplazamiento aparece, independientemente del número de elementos.

' Establecer el ListBox para visualizar los items en múltiples columnas.

listBox1.MultiColumn = True

La propiedad SelectionMode determina cuántos elementos de la lista pueden seleccionarse a la vez.

' establecer el modo de selección para múltiple selección y extendido.

listBox1.SelectionMode = SelectionMode.MultiExtended

' Seleccionamos dos items de el listbox1

listBox1.SetSelected(4, True)

listBox1.SetSelected(8, True)

La propiedad SelectedIndex devuelve un valor entero que corresponde al primer elemento seleccionado en el cuadro de lista. Para cambiar mediante programación el elemento seleccionado, cambie el valor SelectedIndex en el código; el elemento correspondiente de la lista aparecerá resaltado en el formulario Windows Forms. Si no se selecciona ningún elemento, el valor de SelectedIndex es -1. Si se selecciona el primer elemento de la lista, el valor SelectedIndex es 0. Cuando se seleccionan múltiples elementos, el valor SelectedIndex refleja el elemento seleccionado que aparece primero en la lista. La propiedad SelectedItem es similar a SelectedIndex, pero devuelve el elemento en sí, habitualmente un valor de cadena. La propiedad Items.Count refleja el número de elementos de la lista. Su valor es siempre uno más que el mayor valor posible para SelectedIndex, ya que SelectedIndex está basado en cero. .

Para agregar o eliminar elementos de un control ListBox, utilice los métodos Items.Add, Items.Insert, Items.Clear o Items.Remove. También puede agregar elementos a la lista mediante la propiedad Items en tiempo de diseño. Además de la funcionalidad de presentación y selección, ListBox también proporciona funciones que permiten agregar de manera eficaz elementos al control ListBox y buscar texto en los elementos de la lista. Los métodos BeginUpdate y EndUpdate permiten agregar un gran número de elementos a ListBox sin tener que volver a dibujar el control cada vez que se agrega un elemento a la lista.

Este control contiene muchas propiedades y métodos que facilitan el trabajo con datos la mas importante es su propiedad Items que a su vez tiene:

PROPIEDAD. ACCIÓN O SIGNIFICADO

Items.Add(dato): Inserta un elemento al final del listbox.

Items[indice].Text: get or set el dato en la posición indicada (ver primera nota abajo).

Items.Clear(): Elimina todos los elementos de la lista.

Items.Count(): Regresa la cantidad de elementos en lista.

Items.Sorted=true: Ordena los elementos de la lista usar solo al tiempo de diseño.

Items.Contains(dato): Regresa true o false si el dato se encuentra o no se encuentra en la lista.

Items.IndexOf(dato): Regresa el indice o posición del objeto o dato dentro del listbox.

Items.Insert(indice,dato): Inserta el dato en la posición indicada.

Items.Remove(dato): Elimina el dato de el listbox.

Items.RemoveAt(indice): Elimina el dato que esta en la posición indicada.

Una método muy importante  es ListBox.ObjectCollection.AddRange (Método) o simplemente AddRange (para los amigos). Este método aagrega un grupo de elementos a la lista de elementos de ListBox. El siguiente código muestra cómo debe usarse este método.

'agregar elementos  a la  lista usando el 
'método AddRange.
Dim indice As Integer
Dim objItemsLista(11) As System.Object
For indice = 0 To 11
    objItemsLista(indice) = "Elemento de lista " & indice
Next
'ahora agregamos toda el grupo de elementos a la lista.
lstorigen.Items.AddRange(objItemsLista)

Las propiedades, métodos y eventos de este control son muchísimos, aquí sólo se detalla alguna de ellas, las cuales pueden considerarse como las más importantes y a la vez son las más básicas. Usted debe investigar las demás cosillas que posee este control, ya que pueden obtenerse muchos beneficios aprendiendo usar muy bien este control. Personalmente estoy agradecido porque me a permitido realizar buenas cosillas.

Por ejemplo, como cualquier otros controles, el ListBox tiene propiedades interesantes. Mediante el código que sigue explicaré el uso de alguno de ellos.

¿Quién dijo que no se podía realizar búsqueda en un ListBox?. El siguiente código nos permite buscar un determinado elemento en el ListBox. En este caso buscamos la cadena "Visual" y le damos como parámetro adicional el índice de la posición inicial por la que debe empezar a buscar, es decir debe buscar desde el inicio, por eso le damos como valor cero. El resultado lo visualizamos en un TextBox.
TextBox1.Text = lstorigen.Items(lstorigen.FindStringExact("Visual", 0))

Los métodos FindString y FindStringExact permiten buscar un elemento de la lista que contenga una cadena de búsqueda específica.


En el siguiente ejemplo se muestra la forma de usar un control ListBox que muestra varios elementos en columnas y que pueda tener seleccionado más de un elemento en la lista del control. La aplicación incluye dos controles ListBox, uno control lstorigen y otro control lstdestino. El código del ejemplo [Visual Basic .NET] agrega 12 elementos a lstorigen mediante el método Add de la clase ListBox.ObjectCollection y, a continuación, usted puede seleccionar uno o más elementos y pasarlos a formar parte de la otra lista lstdestino . A continuación, el código muestra valores de la colección ListBox.SelectedObjectCollection (mediante la propiedad SelectedItems) y de ListBox.SelectedIndexCollection (mediante la propiedad SelectedIndices). Adicionalmente podemos realizar búsquedas de cadenas, poniendo de esta manera a prueba conceptos muy importantes de nuestro querido Control ListBox.

[Por motivo de tiempo, siempre implemento el código en un sólo lenguaje de Visual Studio, pero si deseas en otros lenguajes, como por ejemplo C# o C++ .NET, no dudes en escribirme al correo para obtener gratuitamente el código]. Puedes bajarte el Fichero con el código de ejemplo para revisar y entender el funcionamiento del LIstBox.

A continuación sigue código en Visual Basic .NET

Public Class Form1
    Inherits System.Windows.Forms.Form
    Private Sub cmdsalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSalir.Click
        Me.Close()
    End Sub
usando un ListBox
Private Sub cmdsalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
   
   
    Handles BtnSalir.Click
   
   
    Me.Close()
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
   
   
    Handles MyBase.Load
   
   
    Me.RbtnCadenaExacta.Checked = True
   
   
    'agregamos los elementos a la lista.
   
    lstorigen.Items.Add("Windows XP")
    lstorigen.Items.Add("Internet")
    lstorigen.Items.Add("Word")
    lstorigen.Items.Add("Excel")
    lstorigen.Items.Add("Acces")
    lstorigen.Items.Add("Power Point")
    lstorigen.Items.Add("Visual Studio .NET")
    lstorigen.Items.Add("Visual Basic .NET")
    lstorigen.Items.Add(".NET Framework")
    lstorigen.Items.Add("Programación Web")
    lstorigen.Items.Add("Servicio Web")
    lstorigen.Items.Add("ASP .NET")
End Sub
Private Sub lstorigen_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) _
   
   
    Handles lstorigen.DoubleClick
   
   
    'genera un evento Click para un botón; es decir, se
   
   
    'llama a este método para provocar el evento Click.
   
    BtnAgregarElementosSeleccionados.PerformClick()
End Sub

Private Sub lstdestino_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) _
   
   
    Handles lstdestino.DoubleClick
   
   
    'genera un evento Click para un botón; es decir, se
   
   
    'llama a este método para provocar el evento Click.
   
    BtnQuitarElementosSeleccionados.PerformClick()
End Sub

Private Sub BtnAgregarTodo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
   
   
    Handles BtnAgregarTodo.Click
   
   
    Dim indice As Integer
   
   
    'borramos todos los elementos de la lista lstdestino
   
    lstdestino.Items.Clear()
   
   
    'ahora agregamos a esta lista todos los elementos de la lista lstorigen
   
   
    For indice = 0 To lstorigen.Items.Count - 1
        lstdestino.Items.Add(lstorigen.Items(indice))
   
   
    Next
End Sub

Private Sub BtnQuitarTodo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
   
   
    Handles BtnQuitarTodo.Click
   
   
    Dim i As Integer
   
   
    'borramos todos los elementos de la lista lstorigen
   
    lstorigen.Items.Clear()
   
   
    'ahora agregamos a esta lista todos los elementos de la lista lstdestino...
   
   
    '... pero usando una lógica distinta.
   
   
    For i = 0 To lstdestino.Items.Count - 1
       
       
        'agregamos el primer elemento de la lista lstdestino a la lista lstdestino
       
        lstorigen.Items.Add(lstdestino.Items(0))
       
       
        'luego, eliminamos este elemento agregado de la lista lstdestino
       
        lstdestino.Items.RemoveAt(0)
       
       
        'puede darte cuenta que cada vez que se hace  esto, 
        

       
       
       
        'se va actualizando el primer elemento de la lista lstdestino
       
       
        'por lo tanto al final, habremos agregado todo los elementos 
        

       
       
       
        'a la lista origen.
   
   
    Next
End Sub


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
   
   
    Handles BtnBuscar.Click
   
   
    If Me.RbtnCadenaExacta.Checked Then
       
       
        If TextBox1.Text <> "" Then
           
           
            If lstorigen.FindStringExact(TextBox1.Text, 0) <> -1 Or _
            lstorigen.FindStringExact(TextBox1.Text, 0) > lstorigen.Items.Count - 1 Then
           
            MsgBox("La cadena " + TextBox1.Text + " ha sido encontrada.")
           
           
            'seleccionamos la cadena
            lstorigen.SetSelected(lstorigen.FindStringExact(TextBox1.Text, 0), True)
       
       
        Else
           
            MsgBox("La cadena " + TextBox1.Text + " NO ha sido encontrada.")
       
       
        End If
   
   
    Else
       
        MsgBox("Ingrese la cadena a buscar")
   
   
    End If

Else
   
   
    If TextBox1.Text <> "" Then
       
       
        If lstorigen.FindString(TextBox1.Text, 0) <> -1 Or _
        lstorigen.FindString(TextBox1.Text, 0) > lstorigen.Items.Count - 1 Then
       
        MsgBox("La cadena " + TextBox1.Text + " ha sido encontrada.")
       
       
        'seleccionamos la cadena
        lstorigen.SetSelected(lstorigen.FindString(TextBox1.Text, 0), True)
   
   
    Else
       
        MsgBox("La cadena " + TextBox1.Text + " NO ha sido encontrada.")
   
   
    End If
Else
   
    MsgBox("Ingrese la cadena a buscar")
End If
End If
End Sub

Private Sub BtnAgregarElementosSeleccionados_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles BtnAgregarElementosSeleccionados.Click
'este código trabaja de manera peculiar. La diferencia es que ahora
' se trabajará tan sólo con aquellos elementos que han sido selecionados.
'Recordar que todos los elementos seleccionados vendrán a formar parte
'de la colección ListBox.SelectedObjectCollection 



Dim j As Integer
For j = 0 To lstorigen.SelectedIndices.Count - 1
lstdestino.Items.Add(lstorigen.SelectedItems(0))
lstorigen.Items.RemoveAt(lstorigen.SelectedIndices(0))
Next
End Sub

Private Sub BtnQuitarElementosSeleccionados_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles BtnQuitarElementosSeleccionados.Click
'ahora agregaremos los  elementos seleccionados    



'de la lista lstdestino a la lista lstorigen
Dim j As Integer
For j = 0 To lstdestino.SelectedIndices.Count - 1
lstorigen.Items.Add(lstdestino.SelectedItems(0))
lstdestino.Items.RemoveAt(lstdestino.SelectedIndices(0))
Next
End Sub
End Class

 

 No olvides de darme tu voto en PanoramaBox, ya que es una manera de animarme a seguir compartiendo contigo lo que voy aprendiendo. Gracias.


ir al índice

Fichero con el código de ejemplo: Perxi_Usando_el_control_ListBox.zip - Tamaño 7.32 KB