Zdravím, nemůžu pohnout s jedním problémem o kterém jsem si ze začátku myslel že je triviální. Jde o toto: Mám win form aplikaci, na formuláři je umístěný label a já chci udělat to, aby když myší najedu na labe nešlo z něj odjet (pokud nebude stisknuto předem dané tlačítko). Myslel jsem si že to půjde jednoduše vyřešit následovně:
Private Sub lblMouseArea_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles lblMouseArea.MouseLeave
'pokud je únikové tlačítko stisknuto, ukončím proceduru
If escapeKey = True Then Exit Sub
'aktuální pozice kurzoru
Dim x As Integer = Control.MousePosition.X
Dim y As Integer = Control.MousePosition.Y
'okraje labelu
Dim minX As Integer = Me.Location.X + Me.lblMouseArea.Location.X 'levý okraj labelu
Dim minY As Integer = Me.Location.Y + Me.lblMouseArea.Location.Y 'horní okraj labelu
Dim maxX As Integer = Me.Location.X + Me.lblMouseArea.Location.X + Me.lblMouseArea.Width 'pravý okraj labelu
Dim maxY As Integer = Me.Location.Y + Me.lblMouseArea.Location.Y + Me.lblMouseArea.Height 'dolní okraj labelu
'indikace kde myš opustila label, včetně rohů
If x >= maxX And y >= maxY Then
Cursor.Position = New Point(maxX, maxY)
ElseIf x >= maxX And y <= minY Then
Cursor.Position = New Point(maxX, minY)
ElseIf x <= minX And y >= maxY Then
Cursor.Position = New Point(minX, maxY)
ElseIf x <= minX And y <= minY Then
Cursor.Position = New Point(minX, minY)
ElseIf x >= maxX Then
Cursor.Position = New Point(maxX, y)
ElseIf x <= minX Then
Cursor.Position = New Point(minX, y)
ElseIf y >= maxY Then
Cursor.Position = New Point(x, maxY)
ElseIf y <= minY Then
Cursor.Position = New Point(x, minY)
End If
End Sub
Jde jen o to že si spočítám kde jsou okraje labelu a porovnávám je s polohou myši. Pro mě z neznámého důvodu ale kód nefunguje správně. Pokud se snažím odjet z labelu přes dolní nebo pravý okraj, kód zafunguje (i když občas se mi stane že pokud chvíli šachuju s myší, stejně label opustí). Pokud se ale snažím odjet přes horní nebo levý okraj, normálně mě to pustí. Mohl by mě někdo nakopnout co že to přehlížím?:) Díky
|