Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: abreu20011 en 26 Agosto 2011, 00:58 am



Título: Handles (VB.NET)
Publicado por: abreu20011 en 26 Agosto 2011, 00:58 am
Saludos :)

Estoy trabajando con el IDE SharpDevelop (con framework 3.5) y no sé si hay algo que hago mal (seguramente) o es que este IDE no vale para nada :S

Cuando declaramos un evento en Visual Studio, tenemos el "Handles" para poder decidir si el evento es por click, dobleclick, etc... Simplemente pongo:

Código:
Sub Label1Click(sender As Object, e As EventArgs) Handles Label1.Click
Msgbox("Hola")
End Sub

Y al pulsar sobre el botón, saltará el MsgBox. Pero si hago exactamente lo mismo en SharpDevelop me dice que "Handles" requiere de una clausula "WithEvents" :S

¿Alguien me podría ayudar? Necesito usar ese handles porque quiero que esto funcione por doble click y no por uno :S

Gracias :)


Título: Re: Handles (VB.NET)
Publicado por: Keyen Night en 26 Agosto 2011, 19:56 pm
No entendí cuál es el problema. Usa Handles XXX.DoubleClick.


Título: Re: Handles (VB.NET)
Publicado por: abreu20011 en 26 Agosto 2011, 23:54 pm
No entendí cuál es el problema. Usa Handles XXX.DoubleClick.

No puedo :S Por eso lo digo, en este IDE me dice que necesito el WithEvents, y auque se lo hice (no se si bien):

Código:
WithEvents x As System.Windows.Forms.Label

ya que label1 no lo reconoce...

Sigue sin ir. Si le hago eso ultimo, depura y arranca, pero le da igual DoubleClick que Click que hola xD Y sin el WithEvents directamente ni depura :(

Gracias :)


Título: Re: Handles (VB.NET)
Publicado por: abreu20011 en 27 Agosto 2011, 00:31 am
Encontré la solución!!! XD
La explico por si alguien más le ocurre:

El IDE SharpDevelop no tiene la barra de eventos de VisualStudio, por lo que cambiar de evento (Click, DobleClick, MouseMove, etc...) no se pueden hacer así como así :S

Primero hay que ir al Designer del formulario en cuestión (en este ejemplo el MainForm) y ahí buscar la declaración del objeto (en este ejemplo un Label)

Código:
Me.label1.Location = New System.Drawing.Point(12, 9)
Me.label1.Name = "label1"
Me.label1.Size = New System.Drawing.Size(100, 23)
Me.label1.TabIndex = 0
Me.label1.Text = "label1"

Eso es lo que creara el Designer al crear un Label manualmente. Si pulsamos sobre él (para crear eventos) nos añadirá la siguiente linea:

Código:
AddHandler Me.label1.Click, AddressOf Me.Label1Click

Tan sólo tenemos que cambiarlo asi:

Código:
AddHandler Me.label1.DoubleClick, AddressOf Me.Label1Click

No he logrado que funcione con cosas como botón derecho o izquierdo, pero es un avance :D

Dentro del propio VisualStudio te recomiendan no cambiar esto manualmente, pero lo cierto es que sino no sé como hacerlo (en SharpDevelop) y por otra parte, parece ir bien. No sé si es una la solución correcta, pero funciona :)

Un saludo a todos


Título: Re: Handles (VB.NET)
Publicado por: Keyen Night en 27 Agosto 2011, 03:20 am
Si es la solución correcta y con respecto a lo de segundo y primer click, el segundo parámetro del sub del evento MouseClick "e" lo puedes invocar como System.Windows.Forms.MouseEventArgs y de allí puedes obtener esa información.