Cómo manejar la caja de control de formularios para eventos de desplazamiento del mouse en VB.NET

programación


Escribí código de manejo del cuadro de control para Form1 en VB.Net usando eventos de desplazamiento y salida del mouse, pero no funciona. ¿Alguien puede decir cuál es el error?

Lo que he probado:

Private Sub Form1_MouseLeave(sender As Object, e As EventArgs) Handles MyBase.MouseLeave
        Me.ControlBox = False
    End Sub

    Private Sub Form1_MouseHover(sender As Object, e As EventArgs) Handles MyBase.MouseHover
        Me.ControlBox = True
    End Sub

Solución 1

Para mí este código está funcionando bien.
Supongo que también tienes varios controles en tu formulario. Si el mouse pasa sobre uno de estos, abandona el formulario.
Si desea que también hagan visible su cuadro de control, debe agregar cada evento de desplazamiento de estos controles también al método Form1_MouseHover.
Quizás también deberías mirar si Form1_MouseLeave realmente detecta el evento Leave.
Le sugiero que cree un método que “sepa” que el mouse está sobre el formulario o uno de sus controles…

Aquí hay un ejemplo de código sencillo que funciona con un temporizador que pertenece al formulario:

V.B.
Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
     Dim p As Point = PointToClient(MousePosition)
      If (p.X >= 0) And (p.X < Width) And (p.Y >= 0) And (p.Y < Height) Then CheckBox1.Checked = True Else CheckBox1.Checked = False
 End Sub

Le di al temporizador un intervalo pequeño (100 ms); lo único que debes saber es que el encabezado del formulario y los bordes no pertenecen a la definición de tamaño del formulario. El tamaño de ellos depende del FormBorderStyle seleccionado. Con esto hay que calcular también…

y otro :

V.B.
Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
    Dim p As Point = MousePosition
    Dim r As Rectangle = Me.ClientRectangle
    r.X += Location.X
    r.Y += Location.Y
    If (p.X >= r.Left) And (p.X <= r.Right) And (p.Y >= r.Top) And (p.Y <= r.Bottom) Then CheckBox1.Checked = True Else CheckBox1.Checked = False
End Sub

コメント

タイトルとURLをコピーしました