Autor Tema: Acerca de Arrays de Controles en VB 2008  (Leído 6471 veces)

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

ADONAIRAFA

  • Gigabyte
  • ****
  • Mensajes: 291
  • Reputación: +37/-1
  • Que bien se siente al terminar un programa !!!
    • Ver Perfil
Acerca de Arrays de Controles en VB 2008
« en: Septiembre 16, 2012, 11:07:41 pm »
Saludos a todos los que vean este post !!!  ;D

Tengo una duda... En VB 6.0, se podía crear un array de controles de una manera sumamente fácil !!!  ::), simplemente accesabas al Control (CommandButtons, TextBoxs, ComboBoxs, etc.) por medio del Index asignado a dicho control, Pero en VB 2008, la vaina es completamente diferente...

Mejor dicho, no existe ninguna "vaina", simplemente no se aceptan los arrays (hasta donde sé) en VB 2008.

Ahora pongo de ejemplo un código sencillo:

Código: (VB) [Seleccionar]
Private Sub Button1_Click(ByVal sender As System.Object, _
                                        ByVal e As System.EventArgs) _
                                        Handles Button1.Click, _
                                        Button2.Click, _
                                        Button3.Click
        If sender.Equals(Button1) Then
            '// Código 1...
        ElseIf sender.Equals(Button2) Then
            '// Código 2...
        ElseIf sender.Equals(Button3) Then
            '// Código 3...
        End If
    End Sub

Lo que necesito saber es, ¿como puedo llamar a uno de estos buttons?, por ejemplo, quiero desde otra subrutina llamar al código del Button3 ¿cómo hago la llamada?

Gracias y perdonen la ignorancia contínua de la cual soy dueño !!!  :-[


Saludos !!!

Manuel F. Borrego S. 8)
Barcelona, Venezuela.
Hay dos tipos de personas: Los que siguen un camino... y los que hacen camino al avanzar !!!

seba123neo

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Re:Acerca de Arrays de Controles en VB 2008
« Respuesta #1 en: Septiembre 16, 2012, 11:34:46 pm »
es que primero de todo deberias crear los controles en tiempo de ejecucion, y con AddHandler le asignas el evento.

con tu sistema, si necesitas crear 300 botones, debes hacer 300 if y el handler del evento Click() tendria el nombre de los 300 botones, en cambio como yo te digo no haces nada de eso.

aca un ejemplo que crea 3 botones:

Código: (vbnet) [Seleccionar]
Public Class Form1

    Dim btnArray(3) As Button ' Array de botones

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Call CrearBotones()
    End Sub

    Private Sub CrearBotones()
        Dim xPos As Integer = 0
        Dim yPos As Integer = 0
        Dim n As Integer = 0

        For i As Integer = 0 To 2
            btnArray(i) = New Button
        Next i

        While (n < 3)
            With (btnArray(n))
                .Tag = n + 1
                .Width = 24
                .Height = 20
                .Text = n + 1
                .Left = 50 * n

                Me.Controls.Add(btnArray(n))
                xPos = xPos + .Width

                AddHandler .Click, AddressOf Me.ClickButton
                n += 1
            End With
        End While

    End Sub

    'Aca manejas el click de todos los botones sin ninguna condicion
    Public Sub ClickButton(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Click
        Dim btn As Button = sender
        MessageBox.Show(btn.Tag)
    End Sub
End Class

y para llamar al click del boton que quieras simplemente llamas al evento que maneja los clicks pasandoles como parametro el boton (lo sacas del array de botones).

Código: (vbnet) [Seleccionar]
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Call ClickButton(btnArray(2), Nothing)
    End Sub

ahi llamaria al boton de indice 2 (que seria el boton 3).

saludos.

ADONAIRAFA

  • Gigabyte
  • ****
  • Mensajes: 291
  • Reputación: +37/-1
  • Que bien se siente al terminar un programa !!!
    • Ver Perfil
Re:Acerca de Arrays de Controles en VB 2008
« Respuesta #2 en: Septiembre 17, 2012, 03:28:51 am »
Excelente Seba !!! :o

Gracias por este Tip (tremendo tip !!!).

Ahora 2 cosas: Que es o cuando se debe hacer uso del AddressOf (no estoy nada claro con el uso de esta instrucción -disculpa la ignorancia-), y acerca del evento:


y para llamar al click del boton que quieras simplemente llamas al evento que maneja los clicks pasandoles como parametro el boton (lo sacas del array de botones).

Código: (vbnet) [Seleccionar]
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Call ClickButton(btnArray(2), Nothing)
    End Sub


Tampoco lo entiendo muy bien que se diga, ya que probé sin esta rutina, y se crean los botones, en esta sub, colocas "Private Sub Button1_Click...", entonces, ¿si colocas un botón en tiempo de diseño, y los demás los creas en T. de E.? Lo que pasa es que estoy como perdido :-[  en esta.

Gracias por tu paciencia hermano !!!


Saludos !!!


Manuel F. Borrego S. 8)
Hay dos tipos de personas: Los que siguen un camino... y los que hacen camino al avanzar !!!

seba123neo

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Re:Acerca de Arrays de Controles en VB 2008
« Respuesta #3 en: Septiembre 17, 2012, 09:50:09 am »
la siguiente linea:

Código: (vbnet) [Seleccionar]
AddHandler .Click, AddressOf Me.ClickButton
el "AddHandler" como la palabra lo indica en ingles "Handler" significa manejador o comunmente llamado "manejador de eventos", es para asociar un evento a un procedimiento, la definicion de la MSDN dice asi "Asocia un evento a un controlador de eventos en tiempo de ejecución."

eso quiere decir, que le asocio el evento .Click de cada boton creado, al procedimiento llamado "ClickButton" (que se puede llamar con el nombre que quieras).

para decirlo facil, todos los clicks que se hagan en los botones, van a ser manejados por el procedimiento "ClickButton".

el "Button1" que ves ahi no hace nada, es simplemente un boton que puse, para mostrarte como se llama al evento click de un boton creado en tiempo de ejecucion.

saludos.

ADONAIRAFA

  • Gigabyte
  • ****
  • Mensajes: 291
  • Reputación: +37/-1
  • Que bien se siente al terminar un programa !!!
    • Ver Perfil
Re:Acerca de Arrays de Controles en VB 2008
« Respuesta #4 en: Septiembre 17, 2012, 09:58:20 pm »
Seba, creo que no planteé bien las dudas que tengo:

No es acerca del AddHandler, es sobre el AddressOf (del que no entiendo).

Saludos !!!
Hay dos tipos de personas: Los que siguen un camino... y los que hacen camino al avanzar !!!

seba123neo

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Re:Acerca de Arrays de Controles en VB 2008
« Respuesta #5 en: Septiembre 17, 2012, 10:08:27 pm »
Seba, creo que no planteé bien las dudas que tengo:

No es acerca del AddHandler, es sobre el AddressOf (del que no entiendo).

Saludos !!!

para todas estas dudas siempre esta la MSDN de microsoft:

AddressOf (Operador)

AddressOf significara algo como "en direccion de",  en este ejemplo, es como que le decis que el evento "Click", sea controlado por el procedimiento "ClickButton".

saludos.

ADONAIRAFA

  • Gigabyte
  • ****
  • Mensajes: 291
  • Reputación: +37/-1
  • Que bien se siente al terminar un programa !!!
    • Ver Perfil
Re:Acerca de Arrays de Controles en VB 2008
« Respuesta #6 en: Septiembre 17, 2012, 10:13:33 pm »
Gracias Seba !!! por eso digo que eres bárbaro !!!  :o

Saludos !!!  ;D
Hay dos tipos de personas: Los que siguen un camino... y los que hacen camino al avanzar !!!