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:
dim pcb as new PictureBox
Como puedo meterle un evento de click? y que me sume uno a una variable, por ejemplo.
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
Muchisimas gracias por la respuesta Sinia :)
Ahora puedo seguir con el proyecto.
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?
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?
Si lo e agregado al form, pero aún sigo sin comprender como usar el control...
Mmm no entiendo... si tu hiciste esto:
dim pcb as new PictureBox
Luego haces:
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..
Siento no haber ayudado antes exponiendo el codigo con mi duda, pero aqui va :D
Codigo:
'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
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.
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
Usa el sender, es el que contiene el control al que se ha llamado:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim pcb As New Button : pcb.Tag = "Elektro H." : AddHandler pcb.Click, AddressOf pcb_click : Me.Controls.Add(pcb)
End Sub
Private Sub pcb_click(sender As System.Object, e As System.EventArgs)
MsgBox(sender.tag)
End Sub
@Patxiku69
No necesitas a San Google para estas cosas, necesitas fijarte en los posts con chincheta en el foro. y sobretodo usar el buscador del foro, porque no hace mucho pregunté un tema parecido y está en la primera página del foro vaya...
Y bueno, aunque llego tarde a lo de asociar eventos, aquí tienes un código que te habría venido muy bien:
[APORTE] Snippets !! (Posteen aquí sus snippets) (http://foro.elhacker.net/net-b62.0/)
Add controls with events in real-time
Dim chk_() As CheckBox
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Array_Size As Integer = 5 'change this for the number of controls that will appear
ReDim chk_(Array_Size)
For chk_num = 0 To Array_Size
chk_(chk_num) = New CheckBox
chk_(chk_num).Text = "Checkbox " + chk_num.ToString
chk_(chk_num).Top = 20 * chk_num
Me.Controls.Add(chk_(chk_num))
' Add a event handler to a subroutine
AddHandler chk_(chk_num).CheckedChanged, AddressOf CheckBoxSub
Next
End Sub
Public Sub CheckBoxSub(ByVal sender As Object, ByVal e As System.EventArgs)
Dim CheckboxN As CheckBox = CType(sender, CheckBox)
If CheckboxN.Checked = True Then MsgBox("Checkbox is checked") Else MsgBox("Checkbox is unchecked")
Ens Sub
Handle the same event for various controls
Private Sub Button_Is_Clicked(sender As Object, e As EventArgs) Handles _
Button1.Click, _
Button2.Click, _
Button3.Click
Dim Clicked_Button As Button = CType(sender, Button)
If Clicked_Button.Name = "Button1" Then
' Things for Button1
ElseIf Clicked_Button.Name = "Button2" Then
' Things for Button2
ElseIf Clicked_Button.Name = "Button3" Then
' Things for Button3
End If
Ens Sub
Saludos!
Muchísimas gracias EleKtro H@cker!!!!
Te are caso, usare el buscador a conciencia ;)
Y pido perdón de paso, ya que instintivamente creo un post antes de buscar profundamente si existe la solución del problema. :-[