Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Patxiku69 en 20 Enero 2013, 16:30 pm



Título: Problema: Añadiendo evento click a un Picturebox
Publicado por: Patxiku69 en 20 Enero 2013, 16:30 pm
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
  1. dim pcb as new PictureBox
Como puedo meterle un evento de click? y que me sume uno a una variable, por ejemplo.


Título: Re: Problema: Añadiendo evento click a un Picturebox
Publicado por: Sinia2 en 20 Enero 2013, 19:46 pm
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


Título: Re: Problema: Añadiendo evento click a un Picturebox
Publicado por: Patxiku69 en 20 Enero 2013, 22:05 pm
Muchisimas gracias por la respuesta Sinia :)
Ahora puedo seguir con el proyecto.


Título: Re: Problema: Añadiendo evento click a un Picturebox
Publicado por: Patxiku69 en 20 Enero 2013, 22:19 pm
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?


Título: Re: Problema: Añadiendo evento click a un Picturebox
Publicado por: $Edu$ en 20 Enero 2013, 23:42 pm
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?


Título: Re: Problema: Añadiendo evento click a un Picturebox
Publicado por: Patxiku69 en 20 Enero 2013, 23:49 pm
Si lo e agregado al form, pero aún sigo sin comprender como usar el control...


Título: Re: Problema: Añadiendo evento click a un Picturebox
Publicado por: $Edu$ en 20 Enero 2013, 23:53 pm
Mmm no entiendo... si tu hiciste esto:

Código
  1. dim pcb as new PictureBox
  2.  
  3.  

Luego haces:

Código
  1. msgbox pcb.tag
  2.  
  3.  

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


Título: Re: Problema: Añadiendo evento click a un Picturebox
Publicado por: Patxiku69 en 20 Enero 2013, 23:59 pm
Siento no haber ayudado antes exponiendo el codigo con mi duda, pero aqui va :D
Codigo:
Código
  1. 'en esta funcion creo el pcb
  2. sub crea_pcb(i as integer)
  3. For j = 0 To i - 1
  4.            Dim pcb As New PictureBox
  5.            pcb.Visible = True
  6.            pcb.ImageLocation = Path_imagenes(j)
  7.            pcb.Height = 150
  8.            pcb.Width = 150
  9.            pcb.Tag = Producto(j)
  10.  
  11.            If contador_fil > 3 Then
  12.                pos_y += 160
  13.                pos_x = 0
  14.                contador_fil = 1
  15.            End If
  16.            If contador_fil = 1 Then
  17.                pos_x = 0
  18.            ElseIf contador_fil = 2 Then
  19.                pos_x = 170
  20.            ElseIf contador_fil = 3 Then
  21.                pos_x = 340
  22.            End If
  23.            pcb.Location = New Point(pos_x, pos_y)
  24.            AddHandler pcb.Click, AddressOf pcb_click
  25.            frmProductos.Controls.Add(pcb)
  26.            contador_fil += 1
  27.        Next
  28. end sub
  29. 'Esta es la funcion del click
  30. Private Sub pcb_click(sender As System.Object, e As System.EventArgs)
  31.    'mi duda es como usar el pcb.tag aquí. (Sin declararlo como public)
  32. End Sub
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  


Título: Re: Problema: Añadiendo evento click a un Picturebox
Publicado por: $Edu$ en 21 Enero 2013, 00:18 am
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.


Título: Re: Problema: Añadiendo evento click a un Picturebox
Publicado por: Patxiku69 en 21 Enero 2013, 00:25 am
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


Título: Re: Problema: Añadiendo evento click a un Picturebox
Publicado por: Eleкtro en 21 Enero 2013, 00:42 am
Usa el sender, es el que contiene el control al que se ha llamado:

Código
  1.    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  2.        Dim pcb As New Button : pcb.Tag = "Elektro H." : AddHandler pcb.Click, AddressOf pcb_click : Me.Controls.Add(pcb)
  3.    End Sub
  4.  
  5.    Private Sub pcb_click(sender As System.Object, e As System.EventArgs)
  6.        MsgBox(sender.tag)
  7.    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
Código
  1. Dim chk_() As CheckBox
  2.  
  3.    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  4.  
  5.        Dim Array_Size As Integer = 5 'change this for the number of controls that will appear
  6.        ReDim chk_(Array_Size)
  7.  
  8.        For chk_num = 0 To Array_Size
  9.            chk_(chk_num) = New CheckBox
  10.            chk_(chk_num).Text = "Checkbox " + chk_num.ToString
  11.            chk_(chk_num).Top = 20 * chk_num
  12.            Me.Controls.Add(chk_(chk_num))
  13.  
  14.            ' Add a event handler to a subroutine
  15.             AddHandler chk_(chk_num).CheckedChanged, AddressOf CheckBoxSub
  16.        Next
  17.    End Sub
  18.  
  19.    Public Sub CheckBoxSub(ByVal sender As Object, ByVal e As System.EventArgs)
  20.         Dim CheckboxN As CheckBox = CType(sender, CheckBox)
  21.         If CheckboxN.Checked = True Then MsgBox("Checkbox is checked") Else MsgBox("Checkbox is unchecked")
  22.    Ens Sub


Handle the same event for various controls

Código
  1.   Private Sub Button_Is_Clicked(sender As Object, e As EventArgs) Handles _
  2.        Button1.Click, _
  3.        Button2.Click, _
  4.        Button3.Click
  5.  
  6.        Dim Clicked_Button As Button = CType(sender, Button)
  7.  
  8.        If Clicked_Button.Name = "Button1" Then
  9.        ' Things for Button1
  10.        ElseIf Clicked_Button.Name = "Button2" Then
  11.        ' Things for Button2
  12.        ElseIf Clicked_Button.Name = "Button3" Then
  13.        ' Things for Button3
  14.        End If
  15.    Ens Sub

Saludos!


Título: Re: Problema: Añadiendo evento click a un Picturebox
Publicado por: Patxiku69 en 21 Enero 2013, 01:01 am
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.  :-[