Test Foro de elhacker.net SMF 2.1

Programación => Programación General => .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 (vbnet) [Seleccionar]
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 (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..
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 (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








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 (vbnet) [Seleccionar]
   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
Código (vbnet) [Seleccionar]
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

Código (vbnet) [Seleccionar]
  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!
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.  :-[