none
Array con nombres de controles sin Indice RRS feed

  • Pregunta

  • Hola buenas tardes gente.

    Tengo una duda que quiero resolver.

    Yo por ejemplo tengo este codigo de creacion de controles por su index.

    Basicamente lo que hace es crear cuadros de imagen segun el cuadro de image previamente creado

    en funcion a los indices del array "characteres" el cual contiene los lenght de palabras escritas previamente.

    Cuadri1(0) << Control Image

    El codigo en sí. Crea cuadros de image por caracter de palabra

    Perro = [] [] [] [] []

    ------------------------

    Una vez comprendido el codigo

    Esta es la cuestion:

    Yo tengo mas palabras, no solo una.

    Tengo 10 palabras las cuales por eso cree Cuadri1(0) Cuadri2(0) ... Cuadri10(0). y este codigo solo me deja reemplazar caracteres por cuadros de una sola palabra.

        Dim A As Long
    
     For transformacion1 = 1 To Characteres(0)
        
                A = Cuadri1.Count
                Load Cuadri1(A)
                ' le asignamos la posición, el caption y lo hacemos visible
                'con cuadrados vacios
        With Cuadri1(A)
                .Left = Cuadri1(A - 1).Left + 462
                .Picture = Imagenes.ListImages(11).Picture
                .Visible = True
        End With
        Next            'PALABRA 1


    Entonces se me surgio la idea de crear un array con los nombres de los controles, asi puedo usar la variable del array para crearlos todos en 1 o 2 for, en vez de repetir todo denuevo con cada "Cuadri"

    quedando asi:

    Dim A As Long
    Dim Creacion As Integer
    Dim transformacion("Cuadri1", "Cuadri2", "Cuadri3", "Cuadri4", "Cuadri5", "Cuadri6", "Cuadri7", "Cuadri8", "Cuadri9", "Cuadri10") As String
    
    For Creacion = 1 To Characteres(9)
    
                A = trasnformacion(Creacion - 1).count
    
                Load transformacion(Creacion -1)(A)
    
            With transformacion(Creacion - 1)(A)
                .Top = transformacion(Creacion - 1)(A - 1).Top + 462
                .Picture = Imagenes.ListImages(11).Picture
                .Visible = True
            End With
    Next

    Pero no me devuelve los eventos como "Count" "top" y "left"

    Solo me dice que "no coinciden los tipos"

    Queriendo usar los nomrbes Cuadri1,Cuadri2,Cuadri3... etc..

    Para identificar los controles previamente creados.

    Entonces aca va la pregunta ¿Existe alguna forma de poner Nombres de controles previamente creados en un array y usarlos para crear controles a base de index?

    Y la otra es: Que otro metodo puedo usar?

    Visual basic 6

    Es para un parcial



    • Editado Sergio Gerard viernes, 12 de mayo de 2017 22:02 Por errores tipograficos
    viernes, 12 de mayo de 2017 21:55

Respuestas

  • Puedes nombrar a cada objeto mediante la colección Controls, por ejemplo:

    Private Sub cmdCrearPictures_Click()
        
        Dim Palabras(3) As String
        Dim Index As Integer
        
        Palabras(0) = "Visual"
        Palabras(1) = "Basic"
        Palabras(2) = "6.0"
        
        For Index = 0 To UBound(Palabras) - 1
            
            Dim CharIndex As Integer
            
            For CharIndex = 0 To Len(Palabras(Index)) - 1
            
                Dim NewIndex As Integer
                
                NewIndex = Controls("Cuadri" & (Index + 1)).Count
                
                Load Controls("Cuadri" & (Index + 1))(NewIndex)
                
                With Controls("Cuadri" & (Index + 1))(NewIndex)
                    .Left = Controls("Cuadri" & (Index + 1))(NewIndex - 1).Left + _
                        Controls("Cuadri" & (Index + 1))(0).Width + 16
                    .Visible = True
                End With
            Next
        Next
    
    End Sub

    Tengo un array con tres (3) palabras (Visual, Basic, 6.0) y tres (3) objetos "seed" (Cuadri1, Cuadri2, Cuadri3)


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Sergio Gerard sábado, 13 de mayo de 2017 8:17
    viernes, 12 de mayo de 2017 22:44

Todas las respuestas

  • Puedes nombrar a cada objeto mediante la colección Controls, por ejemplo:

    Private Sub cmdCrearPictures_Click()
        
        Dim Palabras(3) As String
        Dim Index As Integer
        
        Palabras(0) = "Visual"
        Palabras(1) = "Basic"
        Palabras(2) = "6.0"
        
        For Index = 0 To UBound(Palabras) - 1
            
            Dim CharIndex As Integer
            
            For CharIndex = 0 To Len(Palabras(Index)) - 1
            
                Dim NewIndex As Integer
                
                NewIndex = Controls("Cuadri" & (Index + 1)).Count
                
                Load Controls("Cuadri" & (Index + 1))(NewIndex)
                
                With Controls("Cuadri" & (Index + 1))(NewIndex)
                    .Left = Controls("Cuadri" & (Index + 1))(NewIndex - 1).Left + _
                        Controls("Cuadri" & (Index + 1))(0).Width + 16
                    .Visible = True
                End With
            Next
        Next
    
    End Sub

    Tengo un array con tres (3) palabras (Visual, Basic, 6.0) y tres (3) objetos "seed" (Cuadri1, Cuadri2, Cuadri3)


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Sergio Gerard sábado, 13 de mayo de 2017 8:17
    viernes, 12 de mayo de 2017 22:44
  • Muchas Graciaaaaaaaas!!

    Sos mi nuevo heroe jaja

    (imagen de que funciono, uni los numeros)

    http://fotos.subefotos.com/

    94f99e3297efb8743b66bc3720cfe4f0o.png

    sábado, 13 de mayo de 2017 0:34