La Web del Programador: Comunidad de Programadores
 
    Pregunta:  56778 - ARRAY DE CONTROLES DE CANTIDAD INDETERMINADA
Autor:  Jose Ignacio Calvo Torel
Quiero hacer un programa que permita crear gráficamente un salón de una cafetería.
Se dispondrán de varios diseños de mesas que se podrán añadir, mover, arrastrar, etc.
Las mesas serán picturebox creados en tiempo de ejecución, independientes entre sí y deberán manejar eventos.
Por ahora estoy probando para simplemente añadir varios picturebox en una posición determinada, guardándolos en un array y que al hacer click en uno me aparezca un msgbox con su nombre.
El problema es que al crear un nuevo picturebox y guardarlo en el array, me sobrrescribe los anteriores. Vamos que al final en el array tengo varias copias del último picturebox creado.
Las picturebox se añaden al hacer click en otra picturebox.
Concretando mi pregunta:
¿Cómo hago para que no me sobrrescriba en el array las picturebox anteriores?
El código es el siguiente:

Public Class pruebas
Public WithEvents mipicture As New PictureBox
Public pictures() As PictureBox
Public con As Integer = 0

Private Sub p0_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles p0.Click
Try
ReDim Preserve pictures(con)
pictures(con) = mipicture
pictures(con).Name = "Picture: " & con
pictures(con).Top = 10 * con
pictures(con).Left = 10 * con
pictures(con).BackColor = Color.Black
Me.Controls.Add(pictures(con))
con += 1
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub

Private Sub pruebas_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
asignarEventos()
End Sub

Private Sub asignarEventos()
AddHandler mipicture.Click, AddressOf mipicture_Click
End Sub

Private Sub mipicture_Click(ByVal sender As Object, ByVal e As EventArgs)
MsgBox(sender.Name)
End Sub

Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
For i As Integer = 0 To pictures.Length - 1
MsgBox(pictures(i).Name)
Next
End Sub
End Class

Gracias de antemano

  Respuesta:  abel montalvo
Hola hola
Mas o menos seria así me imagino


Public Class pruebas
' Public WithEvents mipicture As New PictureBox
Public pictures(-1) As PictureBox
' Public con As Integer = 0

Private Sub p0_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles p0.Click
Try
ReDim Preserve pictures(pictures.Length)
pictures(pictures.Length - 1) = New PictureBox
pictures(pictures.Length - 1).Name = "Picture: " & pictures.Length - 1
pictures(pictures.Length - 1).Top = 10 * pictures.Length - 1
pictures(pictures.Length - 1).Left = 10 * pictures.Length - 1
pictures(pictures.Length - 1).BackColor = Color.Black
Me.Controls.Add(pictures(pictures.Length - 1))

AddHandler pictures(pictures.Length - 1).Click, AddressOf mipicture_Click
' con += 1
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub

Private Sub pruebas_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'asignarEventos()
End Sub

'Private Sub asignarEventos()
' AddHandler mipicture.Click, AddressOf mipicture_Click
'End Sub

Private Sub mipicture_Click(ByVal sender As Object, ByVal e As EventArgs)
MsgBox(sender.Name)
End Sub

'Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
' For i As Integer = 0 To pictures.Length - 1
' MsgBox(pictures(i).Name)
' Next
'End Sub
End Class