Objekte wie Picutreboxen ohne Klicken oder Tastatur bewegen sprich mit den Methoden wie Mousehover etc.

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von chris_2091.

    Objekte wie Picutreboxen ohne Klicken oder Tastatur bewegen sprich mit den Methoden wie Mousehover etc.

    Hallo zusammen,
    ich habe folgendes Problem, ich möchte alleine dadurch ein Objekt bewegen können, indem ich einfach über das entsprechende Objekte mit der Maus rübergehe, einen Moment verweile und dann dieses Objekt durch Mausbewegungen ohne zu klicken bewegen kann. Mal abgesehen davon, dass ich die Verweilzeit bei MouseHover noch nicht einstellen konnte, ist das Bewegen des Objekts sehr ruckelig bzw. man braucht mehrere Versuche, dass Objekt bewegt zu bekommen. Hier mein Code

    VB.NET-Quellcode

    1. [vb]Private Sub Modus_MouseHover(sender As Object, e As EventArgs) Handles Ebenenmodus_x_z.MouseHover
    2. ausgewaehlt_x_z = True
    3. End Sub
    4. Private Sub Modus_x_z_MouseMove(sender As Object, e As MouseEventArgs) Handles Ebenenmodus_x_z.MouseMove
    5. If ausgewaehlt_x_z Then
    6. isTrackingExz = True
    7. ex1 = Cursor.Position.X
    8. ey1 = Cursor.Position.Y
    9. End If
    10. End Sub
    11. Private Sub Unterprogramm_MouseMove(sender As Object, e As MouseEventArgs) Handles Me.MouseMove
    12. If isTrackingExz Then
    13. Dim px1 As Integer = Control.MousePosition.X
    14. Dim py1 As Integer = Control.MousePosition.Y
    15. Dim p1 As Point = New Point(px1, py1)
    16. Ebenenmodus_x_z.Location = New Point(Me.PointToClient(p1))
    17. End If
    18. End Sub[/vb]
    @chris_2091 Willkommen im Forum. :thumbup:
    Wenn Du keinen wohldefinierten Start für die Aufnahme der Bewegung verwendest (MouseDown) - wie willst Du das Ende der Bewegung detektieren?
    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 vielen Dnak für Deine schnelle Antwort!
    Der Witz ist ja, dass das ohne ein MouseDown Event (also ohne das die Maus gedrückt wird) gehen soll, daher hatte ich als Start für die Bewegung ja mir den MouseHover ausgesucht, wobei das Event MouseEnter eigentlich auch gehen sollte
    Daher suche ich nach Möglichkeiten wie mein Beginn und Ende der Bewegung definieren kann, habe einwenig herum experimentiert, allerdings nichts zufriedenstellendes gefunden.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „chris_2091“ ()

    chris_2091 schrieb:

    wobei das Event MouseEnter eigentlich auch gehen sollte
    Genau das versuche ich mir vorzustellen, und da kommen mir halt solch grundsätzliche Fragen.
    MouseDown und MouseUp als Start und Stop zu verwenden ist logisch und auch easy.
    Implementiere erst mal dies und dann, wenn alles zu Deiner Zufriedenheit funktioniert, steig um auf HOver.
    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!
    ja das habe ich schon geschafft
    hier der code

    VB.NET-Quellcode

    1. Private Sub Modus_MouseDown(sender As Object, e As MouseEventArgs) Handles Modus.MouseDown
    2. isTracking = True
    3. ex = e.X 'x-Koordinate der Maus
    4. ey = e.Y
    5. End Sub
    6. Private Sub Modus_MouseMove(sender As Object, e As MouseEventArgs) Handles Modus.MouseMove
    7. If (isTracking = True) And (e.Button = MouseButtons.Left) Then
    8. Dim px As Integer = Control.MousePosition.X - ex
    9. Dim py As Integer = Control.MousePosition.Y - ey
    10. Dim p As Point = New Point(px, py)
    11. Modus.Location = New Point(Me.PointToClient(p))
    12. End If
    13. End Sub
    14. Private Sub Modus_MouseUp(sender As Object, e As MouseEventArgs) Handles Modus.MouseUp
    15. isTracking = False
    16. End Sub


    habe das eigentlich dann 1 zu 1 kopiert als MouseDown Event habe ich MouseHover genommen, MouseMove bleibt und anstelle MouseUp halt MouseLeave genommen
    funktioniert halbwegs, allerdings ist das ganze sehr schammig und ruckelig.
    vielleicht hat jemand eine gute Idee wie man das verbessern kann?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „chris_2091“ ()

    @chris_2091
    Probier mal dies (Dein Modus heißt bei mir Panel1):
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Private isTracking As Boolean
    4. Private ex As Integer
    5. Private ey As Integer
    6. Private Sub Modus_MouseDown(sender As Object, e As MouseEventArgs) Handles Panel1.MouseDown
    7. 'If e.Button = MouseButtons.Left Then
    8. ' isTracking = True
    9. ' ex = e.X 'x-Koordinate der Maus
    10. ' ey = e.Y
    11. 'End If
    12. End Sub
    13. Private Sub Modus_MouseMove(sender As Object, e As MouseEventArgs) Handles Panel1.MouseMove
    14. If (isTracking = True) Then
    15. Dim px As Integer = Control.MousePosition.X - ex
    16. Dim py As Integer = Control.MousePosition.Y - ey
    17. Dim p As Point = Me.PointToClient(New Point(px, py))
    18. Panel1.Location = New Point(p.X, p.Y)
    19. Else
    20. ex = e.X 'x-Koordinate der Maus
    21. ey = e.Y
    22. End If
    23. End Sub
    24. Private Sub Modus_MouseUp(sender As Object, e As MouseEventArgs) Handles Panel1.MouseUp
    25. isTracking = False
    26. End Sub
    27. Private Sub Panel1_MouseHover(sender As Object, e As EventArgs) Handles Panel1.MouseHover
    28. isTracking = True
    29. End Sub
    30. End Class
    Mit MouseDown-Up wird das Tracking beendet.
    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!