domingo, 3 de enero de 2010

Creación de Controles Dinamicos masivos con eventos propios


Hola creo que mucha gente ha tenido este tipo de problemas al momento de generar objetos dinámicos deacuerdo a la cantidad de ítem de una consulta efectuada, en este ejemplo solo se hace una consulta a la cantidad de archivos en un directorio, también se puede usar una consulta a una BD espero les sirva.

Imports System.IO
Imports System.Collections
Class Form1
Public
Dim ruta As String = "C:\donde_buscar\"
Dim cuen As Integer
Dim x As Integer = 90
Dim y As Integer = 120
Dim arreglo_top As New ArrayList
Dim arreglo_top_tex As New ArrayList
Dim l As New ArrayList
Dim obj_check() As CheckBox, i As Int16
Dim obj_picture() As PictureBox, j As Int16
Dim obj_combox() As ComboBox, k As Int16
Dim obj_textbox() As TextBox, m As Int16
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ob()
End Sub
Public Function cuenta() As Integer ' cuenta las imagenes en un directorio
ProgressBar1.Minimum = 0
ProgressBar1.Maximum = Directory.GetFiles(ruta, "*.tif", SearchOption.TopDirectoryOnly).Length
ProgressBar1.Value = 0
For Each num As String In Directory.GetFiles(ruta, "*.tif", SearchOption.TopDirectoryOnly)
l.Add(num) 'carga los nombres de los archivos al array
cuen += 1
arreglo_top.Add(x)
x = x + 110 'posicion de altura de combox
arreglo_top_tex.Add(y)
y = y + 110 'posicion de altura de textbox
Next
End Function
Private Function ob() As Object 'funcion para crear los objetos
cuenta() ' inicia la funcion de conteo de archivos
For i = 0 To cuen 'cuen es la cantidad de archivos este dato nos sirve para generar la misma cantidad de objetos.
If i <>Then
'crea el checkbox
ReDim Preserve obj_check(i) ' este procedimiento hace que mantenga el numero de objeto
obj_check(i) = New CheckBox
obj_check(i).Left = 20
obj_check(i).Top = arreglo_top.Item(i) 'jala la posicion de altura para el objeto = alineacion
obj_check(i).Size = New Size(20, 20)
obj_check(i).Text = l.Item(i)
AddHandler obj_check(i).Click, AddressOf lclick
Me.Controls.Add(obj_check(i))
'crea el picturebox
ReDim Preserve obj_picture(i) ' este procedimiento hace que mantenga el numero de objeto
obj_picture(i) = New PictureBox
obj_picture(i).Left = 50
obj_picture(i).Top = arreglo_top.Item(i) 'jala la posicion de altura para el objeto = alineacion
obj_picture(i).ImageLocation = l.Item(i) 'asigna la imagen al picture
obj_picture(i).Size = New Size(100, 100)
obj_picture(i).SizeMode = PictureBoxSizeMode.StretchImage
AddHandler obj_picture(i).Click, AddressOf jclick
Me.Controls.Add(obj_picture(i))
'crea el combox tambien se le puede agregar una consulta a una bd
ReDim Preserve obj_combox(i) ' este procedimiento hace que mantenga el numero de objeto
obj_combox(i) = New ComboBox
obj_combox(i).Left = 170
obj_combox(i).Top = arreglo_top.Item(i) 'jala la posicion de altura para el objeto = alineacion
obj_combox(i).Size = New Size(100, 100)
Me.Controls.Add(obj_combox(i))
'crea el textbox
ReDim Preserve obj_textbox(i) ' este procedimiento hace que mantenga el numero de objeto
obj_textbox(i) = New TextBox
obj_textbox(i).Left = 170
obj_textbox(i).Top = arreglo_top_tex(i) 'jala la posicion de altura
obj_textbox(i).Size = New Size(100, 20)
Me.Controls.Add(obj_textbox(i))
Else
Exit For
End If
ProgressBar1.Value = ProgressBar1.Value + 1 'mueve la barra de progreso
Next
End Function
Private Sub lclick(ByVal sender As Object, ByVal e As EventArgs) '' [b]handles Button1.click, button2.click[/b]
Dim l As CheckBox = CType(sender, CheckBox)
MessageBox.Show(l.Text) 'muestra el nombre de la imagen para prueba
End Sub
Private Sub jclick(ByVal sender As Object, ByVal e As EventArgs) '' [b]handles Button1.click, button2.click[/b]
Dim l As PictureBox = CType(sender, PictureBox)
Process.Start(l.ImageLocation) 'abre la imagen con el visor de windows
End Sub Class
End

No hay comentarios:

Publicar un comentario