none
Agregar items a un ListBox después de haberlo buscado con Controls.Find()

    Pregunta

  • Muy buenas,

    Mi problema es el siguiente, trato de buscar un ListBox con el nombre ListBox1211 para después añadir items a ese ListBox. Para ello he usado el siguiente código:

    Dim Lista121() as ListBox = Me.Controls.Find("ListBox1211", False)

    lista121(0).items.add("lo que sea")

    Pero al ejecutarlo me dice: Unable to cast object of type ‘System.Windows.Forms.Control[]’ to type ‘System.Windows.Forms.ListBox[]’.

    No entiendo porqué me dice que el ListBox no es un tipo de Control. Por otro lado, si lo hago de esta forma:

    Dim Lista121 = Me.Controls.Find("ListBox1211", False)

    lista121(0).items.add("lo que sea")

    Me subraya Lista121(0).Items para indicarme que "Items" no es un miembro de System.Windows.Forms.Control

    Lo que necesito realmente es que después de encontrar el ListBox que estoy buscando pueda añadirle los items que necesite.

    Muchas gracias.

    viernes, 19 de agosto de 2016 10:13

Respuestas

  • "Pedro Curiel" escribió:

    > trato de buscar un ListBox con el nombre ListBox1211 para después añadir items
    > a ese ListBox. Para ello he usado el siguiente código:
    >
    > Dim Lista121() as ListBox = Me.Controls.Find("ListBox1211", False)
    >
    > lista121(0).items.add("lo que sea")
    >
    > Pero al ejecutarlo me dice: Unable to cast object of type
    > ‘System.Windows.Forms.Control[]’ to type ‘System.Windows.Forms.ListBox[]’.
    >
    > No entiendo porqué me dice que el ListBox no es un tipo de Control.

    Hola, Pedro:

    Es normal que obtengas ese error ya que el método Find lo que devuelve es una matriz de objetos de la clase Control, que posteriormente podrás convertir a un objeto ListBox siempre y cuando el elemento elegido de la matriz devuelta se pueda convertir a ListBox, claro está:

        Public Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            ' Llamamos al método Find
            Dim controles As Control() = Me.Controls.Find("ListBox1211", False)
            If (controles.Length = 0) Then
                MessageBox.Show("No existe ningún control llamado ListBox1211")
                ' Abandonamos el procedimiento actual
                Return
            End If
        
            ' Intetamos convertir a ListBox el primer control existente en la matriz obtenida
            Dim Lista121 As ListBox = TryCast(controles(0), ListBox)
     
            If (Lista121 Is Nothing) Then
                MessageBox.Show("No se puede convertir el control al tipo ListBox.")
                Return
            End If
    
            ' Añadir los elementos que procedan al control ListBox
            Lista121.Items.Add("lo que sea")
            Lista121.Items.Add("más de lo que sea")
    
        End Sub

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.




    viernes, 19 de agosto de 2016 10:33
    Moderador