Problema al crear varios picturebox vía codigo

Iniciado por Patxiku69, 19 Enero 2013, 18:53 PM

0 Miembros y 1 Visitante están viendo este tema.

Patxiku69

Buenas, tengo el siguiente problema:
Estoy intentando crear varios PictureBox desde código, pero al ejecutar el programa veo que me crea todos los PictureBox , pero solo aparece uno...
tengo hecho que entre cada PictureBox  deje 200px de distancia respecto al anterior, pero sigue apareciéndome solo uno.
PD: la ruta de imagen es correcta
Aquí les dejo el código:

Código (vbnet) [Seleccionar]

For j = 0 To i - 1
            Dim pcb As New PictureBox
            pcb.Visible = True
            pcb.ImageLocation = Path_imagenes(j)
            pcb.Height = 150
            pcb.Width = 150
            pcb.Tag = Producto(j)
            If contador_fil > 3 Then
                contador_fil = 1
                pos_y = pos_y + 200
            End If
            If contador_fil = 1 Then
                pos_x = 0
            End If
            If contador_fil = 2 Then
                pos_x = 200
            End If
            If contador_fil = 3 Then
                pos_x = 400
            End If
            pcb.Location = New Point(pos_x, pos_y)
            frmProductos.Controls.Add(pcb)
        Next

Eleкtro

El fallo lo tienes en esta comprobación:

Código (vbnet) [Seleccionar]
           If contador_fil > 3 Then
              contador_fil = 1
              pos_y = pos_y + 200
          End If


Si el contador es mayor que tres, tu cambias el valor a 1 y sumas la variable pos_y,
por lo tanto el valor de pos_y siempre será el mismo en todos los ciclos del búcle porque "contador_fil" siempre será "1", así que la comprobación donde sumas el valor de "pos_y" nunca se vuelve a comprobar/sumar...

Fíjate como así sí que funciona:

Código (vbnet) [Seleccionar]
       Dim pos_x As Integer = 0
       Dim pos_y As Integer = 0
       Dim contador_fil As Integer = 4

       For j = 0 To 5 ' i - 1
           Dim pcb As New Button
           pcb.Height = 150
           pcb.Width = 150
           If contador_fil > 3 Then pos_y += 200
           If contador_fil = 1 Then : pos_x = 0
           ElseIf contador_fil = 2 Then : pos_x = 200
           ElseIf contador_fil = 3 Then : pos_x = 400
           End If
               MsgBox(pos_y)
               pcb.Location = New Point(pos_x, pos_y)
               Me.Controls.Add(pcb)
       Next


Saludos.








seba123neo

otra cosa es que no hace falta hacer tantos if si vas a hacer una cuadricula, imaginte que seria una cuadricula de 500, tendrias que hacer 500 if, simplemente usa una variable que se vaya reseteando cada tantos items y operacion matematicas dentro del New Pont().
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

Patxiku69

Okey, muchisimas gracias, ahora me funciona, le añadi tu codigo y un cont_fil +=1 ya que se me habia olvidado ponerselo :)