Událost mouseLeave   otázka

VB.NET

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

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud použijete API funkci ClipCursor, tak ta omezí pohyb kurzoru v definované obdélníkové oblasti. Ale pozor, funguje to globálně v celém systému, takže bude potřeba použít události formuláře Activated a Deactivate a v těchto událostech nastavovat omezenou oblast a celou obrazovku.

http://msdn.microsoft.com/en-us/library/...

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback