Problema con un addhandler Leido 11.062 veces

 
  Broco
Pregunta
Resuelta.
Buen tengo un MenuStript y bueno le añado opciones con un for, osea creo los botones al vuelo, el problema es que cada botón tiene su valor, si hago un addhandler como no me acepta los parámetros, se hace una función simple, sin Byval, he estado mirando sobre WithEvents, pero no lo he entendido..
Lo que necesito es añadirle un handle distinto a cada botón, estoy usando este código para probar..
pero no funciona..


Dim count% = 0

Private Sub action()
MsgBox("i have " & count & "$")
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For I = 0 To 30
count += 1
Dim TheButton As New System.Windows.Forms.Button
AddHandler TheButton.Click, AddressOf action
Next
End Sub


 

 





  Jesús
Respuesta correcta
Ha recibido:
1 premios
A ver, estás definiendo una variable local dentro de la clase form llamada count, en el load vas creando los botones, y añadiendo el handle para que cuando hagas click salte la función, curiosamente vas sumando uno a la variable mientras los creas, cuando haces click en uno de los botones, la cuenta está siempre en 30, si lo que quieres, es ponerle a cada botón digamos un identificador, puedes usar el tag del botón:

Dentro de la cuenta pon:
TheButton.Tag = count

y dentro de la función:
MsgBox("i have " & sender.tag & "$")

De este modo cada vez que creas un botón en su propiedad tag metes el número, y luego cuando haces click muestras el número que se le asignó al crearlo, lo que no puedes hacer es almacenar el número en una misma variable local del formulario y pretender que cada número tenga un count distinto, ya que sólo hay un formulario y una variable count.

 

 


  Jesús
Respuesta correcta
Ha recibido:
1 premios
A ver, estás definiendo una variable local dentro de la clase form llamada count, en el load vas creando los botones, y añadiendo el handle para que cuando hagas click salte la función, curiosamente vas sumando uno a la variable mientras los creas, cuando haces click en uno de los botones, la cuenta está siempre en 30, si lo que quieres, es ponerle a cada botón digamos un identificador, puedes usar el tag del botón:

Dentro de la cuenta pon:
TheButton.Tag = count

y dentro de la función:
MsgBox("i have " & sender.tag & "$")

De este modo cada vez que creas un botón en su propiedad tag metes el número, y luego cuando haces click muestras el número que se le asignó al crearlo, lo que no puedes hacer es almacenar el número en una misma variable local del formulario y pretender que cada número tenga un count distinto, ya que sólo hay un formulario y una variable count.

 

 


  Broco
Okey, ya me sale, dejo el código, por si a alguien le interesa


Dim count% = 0

Private Sub action(ByVal sender As System.Object, ByVal e As System.EventArgs)
MsgBox("i have " & sender.tag & "$")
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For I = 0 To 30
count += 1
Dim TheButton As New System.Windows.Forms.Button
FlowLayoutPanel1.Controls.Add(TheButton)
TheButton.Tag = count
AddHandler TheButton.Click, AddressOf action
Next
End Sub


Gracias JR :)

 

 





    ¿Cuantas columnas?     | 2 columnas | 3 columnas | 4 columnas | 5 columnas | 6 columnas |  
    Escribe la dirección web de la imagen:
  Publica tu respuesta  |  Haz Click en el siguiente cuadro para escribir