Scrollendes Bild stoppen, aber wie?

  • VB.NET

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

    Scrollendes Bild stoppen, aber wie?

    Servus,

    hätte da eine kleine Frage. :rolleyes:

    Ich möchte ein Bild von oben nach unten scrollen mithilfe von den Cursor-Tasten (Also Pfeil-Rauf und Pfeil-Runter)
    Das klappt soweit ganz gut, jedoch "verschwindet" das Bild oben oder unten, je länger ich die Tasten drücke.
    (Mit "ESC" wird das Programm beendet.)

    Hier der Quellcode:

    VB.NET-Quellcode

    1. Private Sub Form1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
    2. Select Case e.KeyCode
    3. Case Keys.Up
    4. PictureBox1.Location = New Point(PictureBox1.Location.X + 0, PictureBox1.Location.Y + 5)
    5. Case Keys.Down
    6. PictureBox1.Location = New Point(PictureBox1.Location.X + 0, PictureBox1.Location.Y - 5)
    7. End Select
    8. If e.KeyCode = Keys.Escape Then
    9. Me.Close()
    10. End If
    11. End Sub


    Wie kann ich es anstellen, das das Bild "stoppt", sobald es oben oder auch unten aufhört?
    Ist vielleicht jetzt doof beschrieben, aber vielleicht wisst Ihr ja was ich meine.

    Oder ist so etwas gar nicht möglich? ?(

    Manche Männer bemühen sich lebenslang, das Wesen einer Frau zu verstehen.
    Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitätstheorie.

    Albert Einstein
    Das ist nicht trivial, denn wenn Du dauernd die Pfeiltasten drückst, wird die MessageQueue mit der Taste vollgeblasen (Auto-Repeat).
    Du hast z.B. folgende Möglichkeit:
    Bei KeyDown, KeyPress und KeyUp das Autorepeat unterbinden, abfragen, ob es zu einem KeyPress ein KeyDown gab

    VB.NET-Quellcode

    1. e.SuppressKeyPress = True ' im KeyDown-Event

    Dann musst Du allerdings beliebig oft Deine Pfeiltasten drücken.
    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!
    Wenn Bild.Top + Bild.Height < 0 ist, dürfte es oben rausgescrollt sein, unten sollte Bild.Top > Form.Height sein.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim xpos As Integer
    3. Dim ypos As Integer
    4. Dim schrittweite As Integer
    5. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    6. Me.KeyPreview = True
    7. xpos = pb1.Left
    8. ypos = pb1.Top
    9. schrittweite = 5
    10. End Sub
    11. Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    12. Select Case e.KeyCode
    13. Case Keys.Up
    14. ypos -= schrittweite
    15. If ypos < 0 Then ypos += schrittweite
    16. Case Keys.Down
    17. ypos += schrittweite
    18. If ypos + pb1.Height > Me.ClientSize.Height Then ypos -= schrittweite
    19. Case Keys.Escape
    20. Application.Exit()
    21. End Select
    22. pb1.Location = New Point(xpos, ypos)
    23. End Sub
    24. End Class

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

    @RodFromGermany & Unwesen:

    Vielen Dank Euch beiden :thumbup:
    Habe lange drüber gegrübelt, aber ist iwie logisch das ganze. :D
    Die Position des Bildes abzufragen, ich denke wohl um zuviele Ecken.... :whistling:

    Manche Männer bemühen sich lebenslang, das Wesen einer Frau zu verstehen.
    Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitätstheorie.

    Albert Einstein
    professioneller wäre, du würdest das Bild ownerdrawn anzeigen. Dazu musstedich aber in die Thematik einarbeiten: Schnelles Zeichnen mit Lockbits (nagut - das ist schon ziemlich optimiert)

    Achso - hier auch eine Lösung, bei der das Control (ich verwende keine Picbox) über die Autoscroll-Property verschoben wird:Picture-Viewer mit Autoscroll