none
Colocar una propiedad de clik a un Picturebox RRS feed

  • Pregunta

  • Localizo varios picturebox que tengo en la aplicación :

    Dim strPictureBox As String = "PB_Panel" + int_numpicbox.ToString
    Dim pb_aux As PictureBox = DirectCast(Me.Controls.Find(strPictureBox, True)(0), PictureBox)

    Pero ahora quiero colocarle a cada uno una propiedad con unas líneas de código en tiempo de ejecución. Sería algo como esto :

    Private Sub PB_Panel1_Click(sender As Object, e As EventArgs) Handles PB_Panel1.Click
        If PB_Sec1.Image Is Nothing Then   
                PB_Sec1.Image = PB_Panel1.Image  
      End If
     End Sub

    ¿Como puedo hacer esta función?

    Gracias.

    jueves, 26 de mayo de 2016 10:29

Respuestas

  • Primero tendrías que definir el método que va a ejecutarse en el evento click tomando el PictureBox a utilizar del argumento sender:

        Private Sub PictureBox_Click(sender As Object, e As EventArgs)
            Dim picture = CType(sender, PictureBox)
            If PB_Sec1.Image Is Nothing Then   
                PB_Sec1.Image = picture.Image  
            End If
        End Sub

    Después utilizar la instrucción AddHandler que te permite indicar el método a ejecutar cuando se genera un evento:

            Dim strPictureBox As String = "PB_Panel" + int_numpicbox.ToString
            Dim pb_aux As PictureBox = DirectCast(Me.Controls.Find(strPictureBox, True)(0), PictureBox)
            AddHandler pb_aux.Click, AddressOf PictureBox_Click


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta Amigozgz jueves, 26 de mayo de 2016 11:56
    • Desmarcado como respuesta Amigozgz jueves, 26 de mayo de 2016 11:56
    • Marcado como respuesta Amigozgz jueves, 26 de mayo de 2016 11:57
    jueves, 26 de mayo de 2016 10:56
  • Depende entre otras cosas de qué dependa la variable int_numpicbo y de cuándo se crean los PictureBox.

    Ten en cuenta que los PictureBox tienen que estar creados y añadidos al formulario. Si los añades con el diseñador de formularios podrías ponerlo en el constructor pero siempre después de llamar al método InitializeComponents, si los creas dinámicamente deberías ejecutar el código después de haberlos creado y añadido al formulario.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta Amigozgz jueves, 26 de mayo de 2016 18:37
    jueves, 26 de mayo de 2016 14:01

Todas las respuestas

  • Primero tendrías que definir el método que va a ejecutarse en el evento click tomando el PictureBox a utilizar del argumento sender:

        Private Sub PictureBox_Click(sender As Object, e As EventArgs)
            Dim picture = CType(sender, PictureBox)
            If PB_Sec1.Image Is Nothing Then   
                PB_Sec1.Image = picture.Image  
            End If
        End Sub

    Después utilizar la instrucción AddHandler que te permite indicar el método a ejecutar cuando se genera un evento:

            Dim strPictureBox As String = "PB_Panel" + int_numpicbox.ToString
            Dim pb_aux As PictureBox = DirectCast(Me.Controls.Find(strPictureBox, True)(0), PictureBox)
            AddHandler pb_aux.Click, AddressOf PictureBox_Click


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta Amigozgz jueves, 26 de mayo de 2016 11:56
    • Desmarcado como respuesta Amigozgz jueves, 26 de mayo de 2016 11:56
    • Marcado como respuesta Amigozgz jueves, 26 de mayo de 2016 11:57
    jueves, 26 de mayo de 2016 10:56
  • Impresionante Asier !!! , mil gracias.

    Una preguntita más sobre este tema :

      Dim strPictureBox As String = "PB_Panel" + int_numpicbox.ToString
            Dim pb_aux As PictureBox = DirectCast(Me.Controls.Find(strPictureBox, True)(0), PictureBox)
            AddHandler pb_aux.Click, AddressOf PictureBox_Click

    Esto ¿como puedo lo   puedo poner para que cargue cuando se cargue el formulario?. Pero no en el evento  load del formulario , si no en su construcción.

    • Editado Amigozgz jueves, 26 de mayo de 2016 12:08
    jueves, 26 de mayo de 2016 11:57
  • Depende entre otras cosas de qué dependa la variable int_numpicbo y de cuándo se crean los PictureBox.

    Ten en cuenta que los PictureBox tienen que estar creados y añadidos al formulario. Si los añades con el diseñador de formularios podrías ponerlo en el constructor pero siempre después de llamar al método InitializeComponents, si los creas dinámicamente deberías ejecutar el código después de haberlos creado y añadido al formulario.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta Amigozgz jueves, 26 de mayo de 2016 18:37
    jueves, 26 de mayo de 2016 14:01
  • Gracias de nuevo. 
    jueves, 26 de mayo de 2016 18:37