Schnellere Funktion -MouseHover

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von Dani=mc^2.

    Schnellere Funktion -MouseHover

    Hallo zusammen,

    ICh hab mal eine Frage und zwar gibt es ein Event,Function und what ever. was schnell reagiert als MouseHover ??

    Momentaniger Code
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Protected Overrides Async Sub OnMouseHover(e As EventArgs)
    2. Await Task.Run(Sub()
    3. MyBase.OnMouseHover(e)
    4. Dim Zeichen As Graphics = Me.CreateGraphics
    5. Zeichen.DrawRectangle(New Pen(Brushes.Red, 2), 10, 10, Me.Width - 20, Me.Height - 20)
    6. End Sub)
    7. End Sub
    8. Protected Overrides Async Sub OnMouseLeave(e As EventArgs)
    9. Await Task.Run(Sub()
    10. MyBase.OnMouseLeave(e)
    11. Dim Zeichen As Graphics = Me.CreateGraphics
    12. Zeichen.DrawRectangle(New Pen(Brushes.LimeGreen, 2), 10, 10, Me.Width - 20, Me.Height - 20)
    13. End Sub)
    14. End Sub
    Moin,

    ​MouseHover ist ein Event. Was hast Du genau vor?

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Man nutzt dafür das entsprechende Paint-Event bzw. überschreibt die OnPaint-Methode.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    das ist nicht GUI+ oder ? Das ist nur GUI

    gesammter code
    Spoiler anzeigen

    VB.NET-Quellcode

    1. ​Option Strict On
    2. Imports System.ComponentModel, System.Drawing
    3. <ToolboxBitmap("C:\Program Files\Microsoft Visual Studio .NET\Common7\Graphics\icons\Traffic\TRFFC09.ICO")> _
    4. Public Class Class1 : Inherits System.Windows.Forms.Control
    5. 'Code fürs zeichnen, also in GDI+
    6. Protected Overrides Sub OnPaint(e As Windows.Forms.PaintEventArgs)
    7. MyBase.OnPaint(e)
    8. Dim Zeichen As Graphics = e.Graphics
    9. '----Schwarzes Viereck----
    10. Hintergrund(Zeichen)
    11. '----End----
    12. '----Innenline Viereck----
    13. Innen(Zeichen)
    14. '----End----
    15. Zeichen.Dispose()
    16. End Sub
    17. Private Sub Hintergrund(Zeichen As Graphics)
    18. Zeichen.FillRectangle(Brushes.Black, 0, 0, Me.Width, Me.Height)
    19. End Sub
    20. Private Sub Innen(Zeichen As Graphics)
    21. Zeichen.DrawRectangle(New Pen(Brushes.LimeGreen, 2), 10, 10, Me.Width - 20, Me.Height - 20)
    22. End Sub
    23. Protected Overrides Async Sub OnMouseHover(e As EventArgs)
    24. Await Task.Run(Sub()
    25. MyBase.OnMouseHover(e)
    26. Dim Zeichen As Graphics = Me.CreateGraphics
    27. Zeichen.DrawRectangle(New Pen(Brushes.Red, 2), 10, 10, Me.Width - 20, Me.Height - 20)
    28. End Sub)
    29. End Sub
    30. Protected Overrides Async Sub OnMouseLeave(e As EventArgs)
    31. Await Task.Run(Sub()
    32. MyBase.OnMouseLeave(e)
    33. Dim Zeichen As Graphics = Me.CreateGraphics
    34. Zeichen.DrawRectangle(New Pen(Brushes.LimeGreen, 2), 10, 10, Me.Width - 20, Me.Height - 20)
    35. End Sub)
    36. End Sub
    37. End Class
    GDI, nicht GUI, das sind zwei paar Stiefel. Das eine ist zum Zeichnen, das andere ist das User Interface, also das, was Du siehst.
    Zu dem Code: Nein, das da ist GDI+.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Dani=mc^2 schrieb:

    was schnell reagiert als MouseHover ?
    Meinst Du ggf. Welches Event wird zuerst ausgelöst?
    Richte Dir alle ein und schreib deren Namen in die Console.
    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!
    Die Toolbox-Bitmap mit einem statischen Pfad abzufragen, ist auch Quatsch. Packe die als Ressource in die Anwendung und verwende die entsprechende Überladung. Der Rest wurde ja schon gesagt: Invalidate aufrufen, um das Steuerelement neuzuzeichnen, das Zeichnen nur in OnPaint steuern und keine asynchronen Vorgänge bei der direkten Modifikation von Steuerelementen (d.h. das Async und all das fliegen raus).
    Wie ich btw. bereits gesagt habe, ist MouseEnter das, was du suchst, und nicht MouseHover.

    Viele Grüße
    ~blaze~
    Daher das ich meisten nicht alles richtig kapiere
    Nehem wir es außenander,
    Ok also alles in OnPaint
    Habe
    Spoiler anzeigen

    VB.NET-Quellcode

    1. ​Option Strict On
    2. Imports System.ComponentModel, System.Drawing
    3. <ToolboxBitmap("C:\Program Files\Microsoft Visual Studio .NET\Common7\Graphics\icons\Traffic\TRFFC09.ICO")> _
    4. Public Class Class1 : Inherits System.Windows.Forms.Control
    5. 'Code fürs zeichnen, also in GDI+
    6. Protected Overrides Sub OnPaint(e As Windows.Forms.PaintEventArgs)
    7. MyBase.OnPaint(e)
    8. Dim Zeichen As Graphics = e.Graphics
    9. '----Schwarzes Viereck----
    10. Zeichen.FillRectangle(Brushes.Black, 0, 0, Me.Width, Me.Height)
    11. '----End----
    12. '----Innenline Viereck----
    13. Zeichen.DrawRectangle(New Pen(Brushes.LimeGreen, 2), 10, 10, Me.Width - 20, Me.Height - 20)
    14. '----End----
    15. Zeichen.Dispose()
    16. End Sub
    17. End Class
    Dein Pfad ist immer noch statisch. Außerdem heißt Dein Control ​Class1. Ist das so gewollt? Zudem brauchst Du die Variable ​Zeichen gar nicht, abgesehen davon ist diese auch falsch geschrieben.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Ja, das ist eine Bibliothek, aber das Control bzw. die Klasse heißt ​Class1. Mir fällt auf, dass Dir noch sehr viel an Grundlagen fehlt. Ich denke, dass es besser wäre, wenn Du Dir zunächst einmal diese zu Gemüte führst und die Erstellung eines eigenen Controls mal zur Seite legst. Fass' das bitte nicht böse auf, aber so ist das denke ich sonst wenig sinnvoll.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Du solltest Zeichnen nicht disposen, weil du damit auch e.Graphics disposed (Referenzgleichheit, und disposed == unbrauchbar).
    Allesdings bin ich mir in dem Falle nichtmal sicher ob das doch nicht schiefgeht, da die e.Graphics ja bereits fertig genutzt wurden. Aber dennoch, lass es.


    Thread wurde nicht geupdatet, juhu.
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Du musst natürlich schon Deine Klassen etc. gescheit benennen, da Du diese ja wiedererkennen musst und ich denke, dass niemand ein Control benutzen möchte, dass sich ​Class1 nennt, weil das dann nicht gerade davon zeugt, dass es qualitativ ist, wenn der Autor dies nicht eingestellt hat.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!: