MouseEnter lag problem

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von ~Revolt~.

    MouseEnter lag problem

    Ich habe 1 panel, 1 picturebox (das im panel ist) und 1 label (das auch im panel ist)

    Mein Problem ist so:

    Wenn ich mein maus von panel zur label bewege (natürlich ist es im panel drin) dann blinkt es

    Mein code:

    VB.NET-Quellcode

    1. Private Sub Panel1_MouseEnter(sender As Object, e As System.EventArgs) Handles Panel1.MouseEnter, Label1.MouseEnter, PictureBox1.MouseEnter
    2. Panel1.BackgroundImage = My.Resources.Bild
    3. End Sub

    kann jemand mir sagen warum es so blinkt (ich bin mir nicht sicher ob es verschmolzen ist)
    MouseEnter heißt, dass die Maus in den Bereich des Objekts eintritt.
    Hast Du eine weitere Routine, in der das Bild zurückgesetzt wird?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das ist es vermutlich.
    Maus geht aufs Panel -> Panel Enter: Bild rein
    Maus geht auf Label -> Panel Leave: Bild weg
    Sofort danach -> Label Enter: Bild hin
    Und schon flackert es.

    Du darfst Leave nur für das Panel abfangen, da beim Verlassen des Labels die Maus immernoch im Panel ist und deshalb ja nix zurückgesetzt werden muss. Allerdings könnte es Probleme geben, wenn das Label direkt am Rand sitzt, weil dann Panel.Leave eventuell nicht gefeuert wird. Musst du mal testen.

    Viele Grüße, Phil.

    YaPh1l schrieb:

    Das ist es vermutlich.
    Maus geht aufs Panel -> Panel Enter: Bild rein
    Maus geht auf Label -> Panel Leave: Bild weg
    Sofort danach -> Label Enter: Bild hin
    Und schon flackert es.

    Du darfst Leave nur für das Panel abfangen, da beim Verlassen des Labels die Maus immernoch im Panel ist und deshalb ja nix zurückgesetzt werden muss. Allerdings könnte es Probleme geben, wenn das Label direkt am Rand sitzt, weil dann Panel.Leave eventuell nicht gefeuert wird. Musst du mal testen.

    Viele Grüße, Phil.

    funktioniert
    aber flackert immer noch
    Zeig doch mal ein wenig mehr Code.
    Du setzt überall nur das eine Bild, dass dann mit sich selbst überschrieben wird. was soll denn da flackern?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    VB.NET-Quellcode

    1. Private Sub Panel1_MouseEnter(sender As System.Object, e As System.EventArgs) Handles Panel1.MouseEnter, Label1.MouseEnter, PictureBox1.MouseEnter
    2. TryPanel1.BackgroundImage = my.resources.bild
    3. Catch ex As Exception
    4. End Try
    5. End Sub
    6. Private Sub Panel1_MouseLeave(sender As Object, e As System.EventArgs) Handles Panel1.MouseLeave, Label1.MouseLeave, PictureBox1.MouseLeave
    7. Panel1.BackgroundImage = nothing
    8. End Sub

    Maus bewegt sich zu Panel (Panel1.MouseEnter).Maus (das sich im panel befindet) bewegt sich zu Label1 (das sich auch im panel1 befindet) ->Bild flackert
    Dann nimm mal ein paar Events raus:

    VB.NET-Quellcode

    1. Private Sub Panel1_MouseEnter(sender As System.Object, e As System.EventArgs) Handles Panel1.MouseEnter
    2. Panel1.BackgroundImage = my.resources.bild
    3. End Sub
    4. Private Sub Panel1_MouseLeave(sender As Object, e As System.EventArgs) Handles Panel1.MouseLeave
    5. Panel1.BackgroundImage = nothing
    6. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Dann nimm mal ein paar Events raus:

    VB.NET-Quellcode

    1. Private Sub Panel1_MouseEnter(sender As System.Object, e As System.EventArgs) Handles Panel1.MouseEnter
    2. Panel1.BackgroundImage = my.resources.bild
    3. End Sub
    4. Private Sub Panel1_MouseLeave(sender As Object, e As System.EventArgs) Handles Panel1.MouseLeave
    5. Panel1.BackgroundImage = nothing
    6. End Sub
    Beim berühen von label1 oder picturebox1 verschwindet das bild :(
    Dieser Code funktioniert bei mir einwandfrei.
    Hast Du in anderen Event-Handlern noch "Störcode" drin?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!