Usando el control ListBox [Aprende a manejar las colecciones: ListBox.ObjectCollection, ListBox.SelectedObjectCollection y ListBox.SelectedIndexCollection ] Fecha: 07/03/2005
|
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 SubPrivate 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.
Fichero con el código de ejemplo: Perxi_Usando_el_control_ListBox.zip - Tamaño 7.32 KB