MouseEventArgs zu OnMouseEnter hinzufügen?

  • Allgemein

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Gather.

    MouseEventArgs zu OnMouseEnter hinzufügen?

    Hallo liebe Community,

    ich habe (leider) mal wieder eine Frage,
    undzwar will ich morgen bzw. heute noch die neue Version meiner MetroControls veröffentlichen jedoch bin ich auf ein Problem bei der ControlBox gestoßen.

    Das Problem ist nämlich die Sub OnMouseEnter, da sie keine MouseEventArgs besitzt. Jedoch brauch ich diese.

    VB.NET-Quellcode

    1. Protected Overrides Sub OnMouseEnter(e As System.EventArgs)
    2. Invalidate()
    3. MyBase.OnMouseEnter(e)
    4. End Sub


    Meine Frage ist deswegen:

    Kann man diese sinnvoll, und funktionierend hinzufügen?

    Sprich ich schätze, dass dies nicht funktionieren wird:

    VB.NET-Quellcode

    1. Protected Overrides Sub OnMouseEnter(e As System.EventArgs, m As MouseEventArgs)
    2. Invalidate()
    3. MyBase.OnMouseEnter(e)
    4. End Sub


    (mir ist klar, dass ich so ebenfalls eine Fehlermeldung erhalte, denn so kann ich die Sub OnMouseEnter ja nicht überschreiben.)

    Bitte um Hilfe,
    Danke im Vorraus!
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    naja ich benötiges für die "Hover-Animation". Ich weiß dass dies auch ohne MouseEventArgs, jedoch benötige ich die genaue MousePosition.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Du blaze, das Ganze funktioniert zwar, jedoch flackert das schon sehr wegen dem MouseMouse Event.

    Wie könnte ich dies fixxen?

    VB.NET-Quellcode

    1. Protected Overrides Sub OnMouseMove(e As MouseEventArgs)
    2. If r.Contains(e.Location) Then
    3. ' MsgBox("minimize")
    4. CurrentStateCB = MouseStateCB.OverMin
    5. RaiseEvent MinimizeClicked(Me, EventArgs.Empty)
    6. ElseIf r2.Contains(e.Location) Then
    7. ' MsgBox("maximize")
    8. CurrentStateCB = MouseStateCB.OverMax
    9. RaiseEvent MaximizeClicked(Me, EventArgs.Empty)
    10. ElseIf r3.Contains(e.Location) Then
    11. ' MsgBox("Close")
    12. CurrentStateCB = MouseStateCB.OverClose
    13. RaiseEvent CloseClicked(Me, EventArgs.Empty)
    14. End If
    15. CurrentState = MouseState.Over
    16. Invalidate()
    17. MyBase.OnMouseMove(e)
    18. End Sub
    19. Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
    20. Dim G As Graphics = e.Graphics
    21. Dim bP As New SolidBrush(Color.FromArgb(0, 122, 204))
    22. Dim pP As Pen = New Pen(Color.FromArgb(0, 122, 204))
    23. Dim rMin As New Rectangle(0, 0, 34, 26)
    24. Dim rMax As New Rectangle(34, 0, 34, 26)
    25. Dim rClo As New Rectangle(68, 0, 34, 26)
    26. Dim pmin As Point = New Point(0, 0)
    27. Dim pmax As Point = New Point(26, 0)
    28. Dim pclose As Point = New Point(52, 0)
    29. If CurrentStateCB = MouseStateCB.None Then
    30. G.DrawImage(My.Resources.mT, pmin)
    31. G.DrawImage(My.Resources.maT, pmax)
    32. G.DrawImage(My.Resources.cT, pclose)
    33. ElseIf CurrentStateCB = MouseStateCB.PressedClose Then
    34. G.DrawImage(My.Resources.mT, pmin)
    35. G.DrawImage(My.Resources.maT, pmax)
    36. G.DrawImage(My.Resources.cP, pclose)
    37. '###################### usw. ######################
    38. End IF
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Wozu brauchst du insgesamt die Position des Mauseintritts? Neuzeichnen ist ja sinnlos, da täte es ein Flag eher, ob die Mausüberprüfung stattfinden soll, etc. Wenn du die Cursor-Position gar nicht benötigst, lass es doch einfach weg oder fehlt der Teil im Code-Ausschnitt?

    Achja: Rastergrafiken sind bei Controls nicht so der Bringer. Entweder benötigt man eine extrem hohe Auflösung (==> dauert ewig) oder es sieht bescheuert aus.

    Gruß
    ~blaze~
    Ich will ja nix sagen, aber WPF kennt solche Probleme ja nicht ;)
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    @Lukas
    och, mit roher gewalt lassen sich da bestimmt ein paar probleme erzeugen xDD

    @TE
    Controls zu animieren ist immer eine recht schlechte idee xD
    Gegen flackern hilft es me.DoubleBuffred auf true zu setzen. Ebenfalls könntest du die .Invalidate-Aufrufe minimieren (also nur neuzeichnen, wenn sich wirklich was verändert). Schon biste beim Thema Properties, erstelle also PrivateProperties (für MouseOverButtonXY, kp) die das neuzeichnen auslösen (aber nur, wenn sich der wert verändert! kannste im Property-Code abfragen). Bei dir wird nach jeder kleinsten Mausbewegung neugezeichnet, unzweckmäßig.

    lg
    Dankeschön :D

    Zum Abschluss, grundsätzlich male ich alles mit GDI und verwende keine Grafiken. Jedoch nur bei diesem Control, sieht es einfach besser so aus.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    ja, so funkt es grundsätzlich sowieso....vorerst.

    Ich habe mir aber auch die anderen Vorschläge zur Herzen genommen,
    und werde beim schauen, dass ich DoubleBuffer so schnell wie möglich ersetzen kann.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!