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 |