Problema: Añadiendo evento click a un Picturebox

Iniciado por Patxiku69, 20 Enero 2013, 16:30 PM

0 Miembros y 2 Visitantes están viendo este tema.

Patxiku69

Buenas, os expongo mi problema:
Como puedo introducirle un evento "Click" a un Picture box vía codigo?

Es decir si yo creo un PictureBox desde el codigo:
Código (vbnet) [Seleccionar]
dim pcb as new PictureBox
Como puedo meterle un evento de click? y que me sume uno a una variable, por ejemplo.

Sinia2

Hola patxiku69

despues de declarar el picturebox tienes que poner

AddHandler pcb.click, AddressOf pcb_click

el pcb_click es la sub que ira cuando hagas click en pcb. 

Private Sub Pcb_Click(sender As System.Object, e As System.EventArgs)
' codigo

End Sub


Saludos

Patxiku69

Muchisimas gracias por la respuesta Sinia :)
Ahora puedo seguir con el proyecto.

Patxiku69

Ahora se me ha generado un nuevo problema...
El click me llega, pero no encuentro la manera de pasarle a esa función una variable que seria el pcb.tag
Alguna solución?

$Edu$

Como pasarle a esa funciona esa variable? Dentro del metodo del click pones el codigo que quieras del control, por ejemplo ese que decis, pcb.tag.

Eso si, una vez que declaraste el pcb y agregaste ese evento del click, lo has agregado al form?

Patxiku69

Si lo e agregado al form, pero aún sigo sin comprender como usar el control...

$Edu$

Mmm no entiendo... si tu hiciste esto:

Código (vb) [Seleccionar]

dim pcb as new PictureBox



Luego haces:

Código (vb) [Seleccionar]

msgbox pcb.tag



por decir algo asi nomas, pero te quiero decir que solo tienes que usar como siempre.. no entiendo, si dejaras codigo seria mas facil..

Patxiku69

Siento no haber ayudado antes exponiendo el codigo con mi duda, pero aqui va :D
Codigo:
Código (vbnet) [Seleccionar]

'en esta funcion creo el pcb
sub crea_pcb(i as integer)
For j = 0 To i - 1
            Dim pcb As New PictureBox
            pcb.Visible = True
            pcb.ImageLocation = Path_imagenes(j)
            pcb.Height = 150
            pcb.Width = 150
            pcb.Tag = Producto(j)

            If contador_fil > 3 Then
                pos_y += 160
                pos_x = 0
                contador_fil = 1
            End If
            If contador_fil = 1 Then
                pos_x = 0
            ElseIf contador_fil = 2 Then
                pos_x = 170
            ElseIf contador_fil = 3 Then
                pos_x = 340
            End If
            pcb.Location = New Point(pos_x, pos_y)
            AddHandler pcb.Click, AddressOf pcb_click
            frmProductos.Controls.Add(pcb)
            contador_fil += 1
        Next
end sub
'Esta es la funcion del click
Private Sub pcb_click(sender As System.Object, e As System.EventArgs)
    'mi duda es como usar el pcb.tag aquí. (Sin declararlo como public)
End Sub









$Edu$

Y anda eso? yo se C# y es tal vez un poco diferente en esto, porque ahi no veo que crees un array de controles, y es lo que quieres, crear muchos controles.

Busca sobre crear array de controles en vb.net en google y encontraras.
Pero por si no entiendes luego, te adelanto que cuando hagas el evento de click, ese evento sera el mismo para todos los controles del array, es decir, le hagas click al picturebox que sea se ejecutara el mismo evento del click.
Pero para diferenciarlo, se usa el "sender" que va de argumento en el evento, que tendras que convertirlo a Picturebox con Ctype creo.

Patxiku69

Los arrays estan definidos en otra parte del codigo. Si pegase todo el codigo el post seria kilometrico :)
Lo que quiero es que todos los pcb me hagan lo mismo al click, aer si San Google logra inspirarme
mil gracias