none
Recorrer los items de un ListBox, para conocer los items seleccionados

    Question

  • Hola Amigos

    Necesito recorrer un ListBox y determinar de cada item si esta seleccionado o No,

    Se puede hacer esto?

     

    Muchas Gracias

    Saludos

     

     

    Thursday, July 22, 2010 10:35 PM

Answers

  • Hola, Francisco:

    Si los elementos del control ListBox son cadenas alfanuméricas que las has añadido mediante el método Add de su propiedad Items, está bien que recorras la colección SelectedItems como te ha comentado Leandro Tuttini.

    Pero si por una casualidad de la vida, la propiedad DataSource del control ListBox no es Nothing, entonces vas a tener que recuperar el objeto adecuado que contiene cada elemento de la colección SelectedItems.

    Por ejemplo, si le has asignado un objeto DataTable a la propiedad DataSource del control ListBox para rellenar automáticamente el control, tienes que obtener el objeto DataRow para poder leer el elemento seleccionado:

            For Each item As DataRowView In ListBox1.SelectedItems

                Dim row As DataRow = item.Row

                ' Obtenemos el valor del primer campo
                MessageBox.Show(CStr(row(0)))

            Next

    Un saludo


    Enrique Martínez [MS MVP - VB]
    Friday, July 23, 2010 11:07 AM
  • hola

    para recorrer los items usa la propiedad Items del control ListBox

    For Each(item As Object in ListBox1.Items)

    Next

    pero para recorrer los seleccionados usa SelectedItems

     

    For Each(item As Object in ListBox1.SelectedItems)

    Next

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Thursday, July 22, 2010 11:22 PM
  • hola

    si puedes asignar programaticamente los item que quieras pero debes usar el metodo

    pero este trabaja por indice no por valor

    si lo usas en conjunto con


    podrias buscar un item por nombre y luego seleccionarlo con SetSelected

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Friday, July 23, 2010 7:12 PM
  • "Francisco1961" me preguntó:

    > Entoces por lo que entiendo no puedo recorrer el listbox y
    > seleccionar algunos items en funcion de un criterio

    Es que ésta es otra cuestión muy distinta a la pregunta de «Recorrer los items de un ListBox, para conocer los items seleccionados». Una cosa es seleccionar elementos dependiendo de un criterio, y otra muy diferente conocer qué elementos son los que están actualmente seleccionados en un control ListBox de selección múltiple. :-)

    Para seleccionar elementos por el nombre en el que aparecen en el control ListBox, primero tienes que buscar su índice con el método FindStringExact, el cual no hace distinción entre mayúsculas y minúsculas. Una vez que obtengas el índice del elemento, entonces llamas al método SetSelected para seleccionarlo (True) o quitar la selección (False).

    Para tus propósitos, bien te puede servir el siguiente método:

        Private Sub SelectedItem(ByVal lb As ListBox, ByVal item As String)

            Dim index As Integer = lb.FindStringExact(item, 0)

            If (index <> -1) Then
                lb.SetSelected(index, True)
            End If

        End Sub

    Ahora, deseas seleccionar un elemento llamado Pepito Jiménez existente en el control ListBox1:

        SelectedItem(ListBox1, "Pepito Jiménez")

    Por supuesto, si cualquier palabra está acentuada, tienes que establecer el acento, porque de lo contrario, se consideraría otra palabra diferente. Pero sí puedes utilizar mayúsculas o minúsculas conjuntamente, porque como te he indicado anteriormente, el método FindStringExact no hace distinción alguna entre ellas.

    Por último, te comento que en éste caso da igual que el control ListBox se encuentre o no enlazado a un origen de datos: mientras especifiques el nombre del elemento que aparece en el control ListBox es más que suficiente.

     


    Enrique Martínez [MS MVP - VB]
    Saturday, July 24, 2010 6:23 AM

All replies

  • hola

    para recorrer los items usa la propiedad Items del control ListBox

    For Each(item As Object in ListBox1.Items)

    Next

    pero para recorrer los seleccionados usa SelectedItems

     

    For Each(item As Object in ListBox1.SelectedItems)

    Next

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Thursday, July 22, 2010 11:22 PM
  • Hola, Francisco:

    Si los elementos del control ListBox son cadenas alfanuméricas que las has añadido mediante el método Add de su propiedad Items, está bien que recorras la colección SelectedItems como te ha comentado Leandro Tuttini.

    Pero si por una casualidad de la vida, la propiedad DataSource del control ListBox no es Nothing, entonces vas a tener que recuperar el objeto adecuado que contiene cada elemento de la colección SelectedItems.

    Por ejemplo, si le has asignado un objeto DataTable a la propiedad DataSource del control ListBox para rellenar automáticamente el control, tienes que obtener el objeto DataRow para poder leer el elemento seleccionado:

            For Each item As DataRowView In ListBox1.SelectedItems

                Dim row As DataRow = item.Row

                ' Obtenemos el valor del primer campo
                MessageBox.Show(CStr(row(0)))

            Next

    Un saludo


    Enrique Martínez [MS MVP - VB]
    Friday, July 23, 2010 11:07 AM
  • Entoces por lo que entiendo no puedo recorrer el listbox y seleccionar algunos items en funcion de un criterio

    Muchas Gracias

     

    Saludos

     

    Friday, July 23, 2010 6:53 PM
  • hola

    si puedes asignar programaticamente los item que quieras pero debes usar el metodo

    pero este trabaja por indice no por valor

    si lo usas en conjunto con


    podrias buscar un item por nombre y luego seleccionarlo con SetSelected

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Friday, July 23, 2010 7:12 PM
  • hola ,

    prueba de esta  manera .

     

    System.Data.DataRowView dr = null;
                for (int i = 0; i<=ListBox.Items.Count -1; i++) {
                    dr = (System.Data.DataRowView)ListBox.Items[i];

                    MessageBox.Show(dr["Columna"].ToString());
                }

    enmanuel grullard

    republica dominicana

     

    Friday, July 23, 2010 8:10 PM
  • "Francisco1961" me preguntó:

    > Entoces por lo que entiendo no puedo recorrer el listbox y
    > seleccionar algunos items en funcion de un criterio

    Es que ésta es otra cuestión muy distinta a la pregunta de «Recorrer los items de un ListBox, para conocer los items seleccionados». Una cosa es seleccionar elementos dependiendo de un criterio, y otra muy diferente conocer qué elementos son los que están actualmente seleccionados en un control ListBox de selección múltiple. :-)

    Para seleccionar elementos por el nombre en el que aparecen en el control ListBox, primero tienes que buscar su índice con el método FindStringExact, el cual no hace distinción entre mayúsculas y minúsculas. Una vez que obtengas el índice del elemento, entonces llamas al método SetSelected para seleccionarlo (True) o quitar la selección (False).

    Para tus propósitos, bien te puede servir el siguiente método:

        Private Sub SelectedItem(ByVal lb As ListBox, ByVal item As String)

            Dim index As Integer = lb.FindStringExact(item, 0)

            If (index <> -1) Then
                lb.SetSelected(index, True)
            End If

        End Sub

    Ahora, deseas seleccionar un elemento llamado Pepito Jiménez existente en el control ListBox1:

        SelectedItem(ListBox1, "Pepito Jiménez")

    Por supuesto, si cualquier palabra está acentuada, tienes que establecer el acento, porque de lo contrario, se consideraría otra palabra diferente. Pero sí puedes utilizar mayúsculas o minúsculas conjuntamente, porque como te he indicado anteriormente, el método FindStringExact no hace distinción alguna entre ellas.

    Por último, te comento que en éste caso da igual que el control ListBox se encuentre o no enlazado a un origen de datos: mientras especifiques el nombre del elemento que aparece en el control ListBox es más que suficiente.

     


    Enrique Martínez [MS MVP - VB]
    Saturday, July 24, 2010 6:23 AM
  • "Emmanuel Grullard" escribió:

    > prueba de esta  manera .
    >
    > System.Data.DataRowView dr = null;
    >            for (int i = 0; i<=ListBox.Items.Count -1; i++) {
    >                dr = (System.Data.DataRowView)ListBox.Items[i];
    >
    >                MessageBox.Show(dr["Columna"].ToString());
    >            }

    Hola:

    Los usuarios de éste foro te estaríamos muy agradecidos si publicaras los ejemplos UTILIZANDO ÚNICAMENTE CÓDIGO DE VISUAL BASIC .NET, porque para eso estamos en un foro de Visual Basic. Si estuviéramos en el foro de C#, pues está bien que se utilicen ejemplos escritos en C#, pero no es el caso. ¿OK?

    Un saludo


    Enrique Martínez [MS MVP - VB]
    Saturday, July 24, 2010 6:26 AM
  • hola,

    ufffffffffffffff , no me habia fijado disculpen amigos

    enmanuel grullard

    republica dominicana

     

    Monday, July 26, 2010 2:13 PM