Wenn Maus in Form, Opacity auf 100, ansonsten 50

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von enIking1998.

    Wenn Maus in Form, Opacity auf 100, ansonsten 50

    Hallo,

    ich möchte, wenn die Maus in der Form ist, dass die Opacity auf 100 gesetzt wird
    und wenn sie die Form verlässt, soll Opacity auf 50 stehen.

    Freue mich auf Antworten.

    MFG

    Alex-Digital :D
    Mouse_Enter Event + Mouse_Leave + .Opacity Eigenschaft der Form.
    Moderatorin: "Apropo ritzen.." Shin Chan: "hoho sie hat Po ritze gesagt"
    "saying to buy a mac because your anti-virus expired is like saying you're out of condoms so you're just going to go fuck dudes"
    "Wie auch in anderen Threads kann ich leider nichts bieten außer vielleicht spaß beim Skypen aber mehr leider auch nicht." - Sind kinder pornos nicht verboten?
    @Glossy Cherry:

    Wenn ich diesen Code verwende:

    VB.NET-Quellcode

    1. Private Sub Form1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.MouseEnter
    2. Me.Opacity = 100
    3. End Sub
    4. Private Sub Form1_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.MouseLeave
    5. Me.Opacity = 50
    6. End Sub


    funktioniert es, wenn die Maus in der Form ist, aber wenn
    ich aus der Form rausgehe, passiert gar nichts.

    MFG

    Alex-Digital :D
    War Opacity ned ein Double?
    Moderatorin: "Apropo ritzen.." Shin Chan: "hoho sie hat Po ritze gesagt"
    "saying to buy a mac because your anti-virus expired is like saying you're out of condoms so you're just going to go fuck dudes"
    "Wie auch in anderen Threads kann ich leider nichts bieten außer vielleicht spaß beim Skypen aber mehr leider auch nicht." - Sind kinder pornos nicht verboten?
    Das funktioniert also nicht: :?:

    VB.NET-Quellcode

    1. Private Sub Form1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.MouseEnter
    2. Me.Opacity = 1.0
    3. End Sub
    4. Private Sub Form1_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.MouseLeave
    5. Me.Opacity = 0.5
    6. End Sub
    Das funktioniert nicht so einfach.
    Sobald man mit der Maus innerhalb der Form über ein anderes Control fährt, wird das MouseLeave-Event ausgelöst.
    Das MouseMove-Event wird dann auch nicht mehr ausgelöst.

    Ich hätte folgende Theorie:
    Prüfe im MouseLeave-EventHandler, ob die Mauskoordinaten (Control.MousePosition) innerhalb der Form sind. Sind sie das, befindet sich die Maus über einem Control der Form.
    Vorsicht: Das MouseLeave-Event wird ausgelöst, sobald sich der Cursor aus dem ClientRectangle bewegt. Der Rahmen der Form wird also nicht mehr zur Form gezählt.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Hallo,

    ich habe schon viel rumprobiert und bin
    immer noch nicht auf die Lösung gestoßen.

    Würde jemand sich kurz die Zeit nehmen und
    ausprobieren, welche Methode funktioniert?

    Und FormBorderStyle = None.

    MFG

    Alex-Digital :D

    EDIT:

    Gelöst:

    VB.NET-Quellcode

    1. Private Sub frmMain_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove, MonthCalendar1.MouseMove
    2. If MousePosition.X >= Me.Left AndAlso MousePosition.X <= Me.Left + Me.Width AndAlso MousePosition.Y >= Me.Top AndAlso MousePosition.Y <= Me.Top + Me.Height Then
    3. Me.Opacity = 1
    4. End If
    5. End Sub
    6. Private Sub frmMain_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.MouseLeave, MonthCalendar1.MouseLeave
    7. Me.Opacity = 0.5
    8. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Alex-Digital“ ()

    @Alex-Digital:
    Ist ganz einfach:
    Im MouseEnter-EventHandler die Opacity-Eigenschaft auf 1 stellen. Das weißt Du ja bereits.

    Und im MouseLeave-EventHandler erstellst Du ein System.Drawing.Rectangle und übergibst die Position und Größe des Fensters (Me.Location und Me.Height). Mit .Contains prüfst Du dann, ob die Mausposition (Control.MousePosition) innerhalb dieses Rechtecks ist.
    Ist das nicht der Fall, stellst Du die Opacity-Eigenschaft auf 0.5.


    Edit: Hab's auch getestet.
    Ein Problem gibt's nur, wenn man beispielsweise ein anderes Fenster darüber hat und über das heraus fährt.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Evetuell könntest Du dieses noch gebrauchen:

    Im Timer

    VB.NET-Quellcode

    1. If MousePosition.X > Me.Location.X And MousePosition.Y > Me.Location.Y And MousePosition.X < Me.Location.X + Me.Size.Width And MousePosition.Y < Me.Location.Y + Me.Size.Height Then
    2. If (Me.Opacity < 1) Then
    3. Me.Opacity += 0.025
    4. End If
    5. Else
    6. If (Me.Opacity > 0.7) Then
    7. Me.Opacity -= 0.025
    8. End If
    9. End If


    Mfg.eniking1998