entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Buscar elemento (texto) en un listbox VB.NET

Un saludo

Resulta que tengo un Listbox en el que cargo una lista de items(texto), un textbox donde digito el nombre del item que voy a agregar al listbox, y un botón para llamar a la acción.

Lo que deseo es que antes de agregarlo, verificar que ya no haya sido ingresado al listbox, en caso de que ya esté, entonces marcarlo como seleccionado. Estaba probando el FindString() pero al parecer busca una sola letra y quiero que compare la palabra entera.

Hasta ahora tengo ésto :
La función click para realizar la acción :

Private Sub btnAgregar_Click(sender As Object, e As EventArgs) Handles btnAgregar.Click

    If buscaTexto(textBox.Text) = True Then
       ListBox.SelectedIndex = ListBox.FindString(textBox.Text)
    Else
        ListBox.Items.Add(textBox.Text)
    End If

End Sub

La función que hace la busqueda y retorna True si lo halló (Aparece error en comparar ListBox.SelectedIndex = texto ):

 Public Function buscaTexto(ByVal texto As String) As Boolean
        Dim x As Integer

        For x = 0 To ListBox.Items.Count - 1

            If ListBox.SelectedIndex = texto Then
                Return True
            End If

        Next

        Return False
End Function

Qué debería cambiar para lograr que haga la busqueda adecuadamente ? Ya que me muestra un error, conocen otro metodo para buscar? (Sencillo)

1 Respuesta

1voto

carlossevi Puntos63560

El problema lo tienes con esta parte del código:

For x = 0 To ListBox.Items.Count - 1
    If ListBox.SelectedIndex = texto Then
        Return True
    End If
Next

Estás comparando cosas distintas que además no tienen mucho sentido. En primer lugar te recomiendo ver la documentación de la propiedad SelectedIndex. Son dos cosas distintas porque:

  • SelectedIndex es un número entero, que se corresponde con un índice de base cero y lo comparas con una cadena de texto.
  • SelectedIndex se corresponde con el índice seleccionado, así que en cada iteración del bucle estás volviendo a comparar lo mismo una y otra vez porque ninguno de los valores de la comparación cambia.

Te propongo un código alternativo:

For Each ItemValue As String In ListBox.Items
    If ItemValue = texto Then
        Return True
    End If
Next

Esta versión recorre todos los elementos del ListBox tomándolos como cadena de texto, así puedes hacer directamente la comparación.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta