Panel mit Buttons scrollen geht nicht :/

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

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Luca.

    Panel mit Buttons scrollen geht nicht :/

    Hi,
    ich hab ein Panel und möchte es in der Horizontalen mit Buttons scrollen ohne das die horizontale Scrollbar gezeigt oder beim scrollen kurz eingeblendet wird. Ich hab es mit diesem Code versucht, aber manchmal kann man einfach nicht mehr weiter scrollen und die Scrollbars werden beim Scrollen immer ganz kurz eingeblendet.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class frmTest
    2. Dim X As Integer = 0
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. AddControls()
    5. End Sub
    6. Private Sub AddControls(Optional ControlCount As Integer = 20)
    7. With pControls
    8. Controls.Clear()
    9. For i = 0 To ControlCount - 1 ' -1 weil --- ControlCount = 20 --> 21 Buttons werden hinzugefügt --- 0,1,2...19,20,20 mit 0 sind es 21 Buttons
    10. Dim newBtn As New Button
    11. newBtn.Location = New Point((newBtn.Width + 2) * i, .Height / 2 - newBtn.Height / 2)
    12. newBtn.Text = "Button - " + i.ToString
    13. .Controls.Add(newBtn)
    14. Next
    15. End With
    16. End Sub
    17. Private Sub pControls_Scroll(sender As Object, e As ScrollEventArgs) Handles pControls.Scroll
    18. X = e.NewValue
    19. End Sub
    20. Public Enum ScrollDirection
    21. Left
    22. Right
    23. End Enum
    24. Public Sub ScrollPanel(SD As ScrollDirection, Optional Factor As Integer = 25)
    25. With pControls.HorizontalScroll
    26. Select Case SD
    27. Case ScrollDirection.Left
    28. X -= Factor
    29. If X < .Minimum Then X = .Minimum
    30. .Value = X
    31. Case ScrollDirection.Right
    32. X += Factor
    33. If X > .Maximum Then X = .Maximum
    34. .Value = X
    35. Case Else
    36. Exit Sub
    37. End Select
    38. End With
    39. End Sub
    40. Private Sub btnLeft_Click(sender As Object, e As EventArgs) Handles btnLeft.Click
    41. ScrollPanel(ScrollDirection.Left, pControls.HorizontalScroll.LargeChange)
    42. End Sub
    43. Private Sub btnRight_Click(sender As Object, e As EventArgs) Handles btnRight.Click
    44. ScrollPanel(ScrollDirection.Right, pControls.HorizontalScroll.LargeChange)
    45. End Sub
    46. Private Sub btnNewButtons_Click(sender As Object, e As EventArgs) Handles btnNewButtons.Click
    47. AddControls(nudControlCount.Value)
    48. End Sub
    49. End Class


    Ich hoffe ihr könnt mir helfen :D

    MfG Luca
    Dateien
    • Test.zip

      (95,44 kB, 104 mal heruntergeladen, zuletzt: )
    @Luca Probier mal dies:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Me.Panel1.Location = New Point(Me.Panel1.Location.X - 20, Me.Panel1.Location.Y)
    3. End Sub
    4. Private Sub Button5_Click(sender As System.Object, e As System.EventArgs) Handles Button5.Click
    5. Me.Panel1.Location = New Point(Me.Panel1.Location.X + 20, Me.Panel1.Location.Y)
    6. End Sub
    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!
    Ich hab ein SplitLayoutPanel und darin das Panel. Also kann ich es nicht so groß machen, wie es sein muss, damit alle Controls hinzugefügt werden können ohne, dass eine ScrollBar benötigt wird. Das würde also nicht gehen, weil ich das Panel nicht vergrößern kann. Kann man vielleicht ohne das die ScrollBars angezeigt werden AutoScrollPosition benutzen ? :D

    EDIT: sry, SplitContainer :D

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

    Luca schrieb:

    ich hab ein Panel

    Luca schrieb:

    Ich hab ein SplitLayoutPanel
    Wenn Du mit Deiner Aufzählung fertig bist, beschreibe bitte Dein Problem so, dass man es so versteht, wie Du es meinst. X(
    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!
    Definiere

    Luca schrieb:

    SplitLayoutPanel
    solch kommt bei mir (VS 2010) nicht vor.
    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!

    Luca schrieb:

    SplitLayoutPanel

    So etwas kommt bei mir auch nicht vor, und ich habe VS 2013.
    Also was bitte benutzt du?!
    Es existiert ein Interesse an der generellen Rezession der Applikation relativ primitiver Methoden komplimentär zur Favorisierung adäquater komplexer Algorithmen.
    ------------------------------------------------------------------------------------
    Rising Existence - das GTA V-MP Projekt mit Zukunft und Innuvation
    sry hab mit meinem Handy geschrieben und dachte es heißt so :/ . Ich hab ein SplitContainer :D Ich dachte wegen FlowLayoutPanel, dass es so heißt. Aber darin hab ich ein Panel und ich möchte es nur scrollen ohne, dass die Scrollbars angezeigt werden.
    @Luca Hatten wir doch gerade.
    Probier dies:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Me.Panel1.Location = New Point(Me.Panel1.Location.X - 20, Me.Panel1.Location.Y)
    3. End Sub
    4. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    5. Me.Panel1.Location = New Point(Me.Panel1.Location.X + 20, Me.Panel1.Location.Y)
    6. End Sub
    7. Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
    8. Me.Panel1.Location = New Point(Me.Panel1.Location.X, Me.Panel1.Location.Y - 20)
    9. End Sub
    10. Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
    11. Me.Panel1.Location = New Point(Me.Panel1.Location.X, Me.Panel1.Location.Y + 20)
    12. End Sub
    Und ersetze dann dier Buttons durch Deine eigene Ansteuerung.
    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!