none
Crear eventos en tiempo de ejecución. VB.NET 2010 RRS feed

  • Pregunta

  • Buen día. Hoy vengo a consultarles como crear eventos en tiempo de ejecución. Busque en Internet pero ninguno servia para vb.net 2010. 

    Mi programa posee un panel (este es creado en tiempo de diseño) llamado PanelContenedor, en donde guardare todos los elementos que cree a continuación. 

    En en load es llamado el siguiente código: 

       Dim i As Integer                ' contador del for
            Dim posalto As Integer = 20     ' posicion en la que se crea el primer panel, aunmenta al terminar el for. 
            Dim numeronombre As Integer = 0 '  se va aumentando cada vez que crea un nuevo panel ( es parte del                                                                                                                                                              nombre del panel) 

            For i = 1 To 70
                Dim Panel1 = New System.Windows.Forms.Panel()
                Panel1.Location = New System.Drawing.Point(11, posalto) ' el 11 se mantiene igual siempre. 
                Panel1.Name = "Panel" + numeronombre.ToString
                Panel1.Size = New System.Drawing.Size(717, 23)
                Panel1.BackColor = Color.Black     'uso el color negro para verificar que se creo. 

                Me.PanelContenedor.Controls.Add(Panel1)
                posalto = posalto + 24
                numeronombre = numeronombre + 1
            Next i

    Crea 70 paneles dentro de mi PanelContenedor. Lo que deseo es que cada uno de estos 70 paneles que creo tengan el metodo
    Panel_Click(sender As Object, e As System.EventArgs) , pero no logro hacerlo. 
    Si me pudieran ayudar con esto estaría muy agradecido. 

    Saludos! 

    lunes, 11 de diciembre de 2017 4:07

Respuestas

  • '...
    Panel1.BackColor = Color.Black
    AddHandler Panel1.Click, AddressOf Panel_Click
    Me.PanelContenedor.Controls.Add(Panel1)
    '...

    • Marcado como respuesta Mauroo lunes, 11 de diciembre de 2017 7:37
    lunes, 11 de diciembre de 2017 4:44

Todas las respuestas

  • '...
    Panel1.BackColor = Color.Black
    AddHandler Panel1.Click, AddressOf Panel_Click
    Me.PanelContenedor.Controls.Add(Panel1)
    '...

    • Marcado como respuesta Mauroo lunes, 11 de diciembre de 2017 7:37
    lunes, 11 de diciembre de 2017 4:44
  • '...
    Panel1.BackColor = Color.Black
    AddHandler Panel1.Click, AddressOf Panel_Click
    Me.PanelContenedor.Controls.Add(Panel1)
    '...

    Gracias por tu respuesta. Poseo otra duda.
    Como hago referencia al panel? (porque no se cual de los 70 esta usando)

    un ejemplo sencillo, como mostraría el nombre del panel? 

        Private Sub Panel_Click(sender As Object, e As EventArgs)
            MsgBox(Panel.Name)
        End Sub

    Yo pensé que seria algo así...pero me da error. 

    Saludos


    lunes, 11 de diciembre de 2017 19:41
  • Fíjate en el parámetro sender, que se encuentra en la firma de la función 'Panel_Click', el parámetro sender contiene la referencia al control que produjo el evento, en consecuencia, si deseas recuperar el valor de alguna propiedad, del control que desencadeno el evento, debes referirte al parámetro sender, por ejemplo:

    Private Sub Panel_Click(sender As Object, e As EventArgs)
    
    	Dim _Panel = DirectCast(sender, Panel)
    
    	MessageBox.Show(_Panel.Name)
    
    End Sub

    lunes, 11 de diciembre de 2017 20:12
  • Te super agradezco! Me ahorraste mucho tiempo! 
    lunes, 11 de diciembre de 2017 20:19