Form automatisch scrollen

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Form automatisch scrollen

    Folgende Situation, es gibt ein MouseDown Event, mit dem etwas auf der Form verschoben wird.
    Wenn man jetzt beim verschieben aber weiterscrollen muss, muss man sofern man überhaupt ein Mausrad hat dieses parallel zur gedrückt gehaltener Maustaste bedienen.
    Ich möchte jetzt gerne das die Form automatisch hoch und runter scrollt, sobalt man mit dem Cursor in der nähe des Randes der Form ist.

    Autoscroll ist an und das ich das mit Me.AutoScrollPosition ansprechen muss ist mir auch schon klar.
    Allerdings habe ich das gesamt konstrukt noch nicht zum laufen bekommen.
    Wenn mir jemand mal eine kleine Vorlage geben könnte wäre ich sehr dankbar.
    Wahrscheinlcih hat niemand was direkt im Ärmel für diese hübsche Knobelaufgabe.
    Vlt magst du ja dein Anliegen auch als Knobelaufgabe zu formulieren, hab ich extra einen Thread mal für aufgemacht: [Sammelthread] Knobel-Aufgaben, knifflige Algorithmen, elegante Lösungen
    Also es ist an dir eine Vorlage zu liefern, und vlt. findet sich ja wer, der eine Scrollerei da dranbastelt.
    hab mal auf die Schnelle was gebastelt.
    Es mit der Heissen Nadel gestrickt und natürlich nur eine Grundlage ! .. aber besser als Nichts :P

    Du musst noch auf der Form einen Timer legen und als Intervall 30 ... 20 oder so angeben.. der entscheidet über die Geschwindigkeit.


    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim ScrollBereich As Integer = 40 ' Abstand vom Rand wo das autoscrollen losgeht
    3. Dim ScrollStep As Integer = 10 '* immer gleich 10 Pixel
    4. Dim WieScrollen As enmWieScrollen = enmWieScrollen.Garnicht
    5. Enum enmWieScrollen
    6. Garnicht
    7. NachUnten
    8. NachOben
    9. NachRechts
    10. NachLinks
    11. End Enum
    12. Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    13. Me.AutoScrollMinSize = New Size(3000, 3000) ' Die Gesamtgröße der Arbeitsfäche
    14. Me.DoubleBuffered = True ' sonst flakkerts
    15. Timer1.Enabled = True
    16. End Sub
    17. Private Sub Form1_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
    18. If e.Location.Y > ClientRectangle.Bottom - ScrollBereich Then
    19. WieScrollen = enmWieScrollen.NachUnten
    20. ElseIf e.Location.Y < ScrollBereich Then
    21. WieScrollen = enmWieScrollen.NachOben
    22. ElseIf e.Location.X < ScrollBereich Then
    23. WieScrollen = enmWieScrollen.NachLinks
    24. ElseIf e.Location.X > Me.ClientRectangle.Right - ScrollBereich Then
    25. WieScrollen = enmWieScrollen.NachRechts
    26. Else
    27. WieScrollen = enmWieScrollen.Garnicht
    28. End If
    29. End Sub
    30. Private Sub ScrollMe()
    31. Select Case WieScrollen
    32. Case enmWieScrollen.NachUnten '
    33. Me.AutoScrollPosition = New Point(System.Math.Abs(Me.AutoScrollPosition.X), System.Math.Abs(Me.AutoScrollPosition.Y) + ScrollStep)
    34. Case enmWieScrollen.NachOben
    35. Me.AutoScrollPosition = New Point(System.Math.Abs(Me.AutoScrollPosition.X), System.Math.Abs(Me.AutoScrollPosition.Y) - ScrollStep)
    36. Case enmWieScrollen.NachRechts
    37. Me.AutoScrollPosition = New Point(System.Math.Abs(Me.AutoScrollPosition.X - ScrollStep), System.Math.Abs(Me.AutoScrollPosition.Y))
    38. Case enmWieScrollen.NachLinks
    39. Me.AutoScrollPosition = New Point(System.Math.Abs(Me.AutoScrollPosition.X + ScrollStep), System.Math.Abs(Me.AutoScrollPosition.Y))
    40. End Select
    41. End Sub
    42. Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
    43. ScrollMe()
    44. End Sub
    45. End Class

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „RoulettePilot“ ()

    das ist nur in zweiter Linie dein Fehler. In erster Linie ist das ein katastrophales MisDesign von MS: die AutoScrollPosition ist eine inkonsistente Property: Du weist ihr einen "positiven" Point (zb {30,30}) zu, und wenn du ihn wieder abrufst ist er ins negative verkehrt: {-30,-30}

    is irre X/