Panel zeigt keine Scrollbar an

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

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von PadreSperanza.

    Panel zeigt keine Scrollbar an

    Hallo Community,

    ich bastle gerade an einem Tool für interne News zum anzeigen. Hierzu lade ich eine Form mehrmals in ein Panel (untereinander), je nach Anzahl der News.
    Sind mehr Forms eingeblendet als das Panel hoch ist wird aber keine Scrollbar angezeigt. AutoScroll ist true.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. dt = myDataSet.Tables("NEWS")
    3. For Each DR In dt.Rows
    4. Dim newFrm As New Form2
    5. SetParent(newFrm.Handle, Panel1.Handle)
    6. newFrm.Location = New Point(0, Panel1.AutoScrollPosition.Y + locNewsY)
    7. newFrm.Show()
    8. If DR("GELESENVON").Contains("agraf") Then
    9. newFrm.LAB_UEBERSCHRIFT.Font = New Font("Microsoft Sans Serif", 10, FontStyle.Regular)
    10. newFrm.PB_NEW.Visible = False
    11. Else
    12. newFrm.LAB_UEBERSCHRIFT.Font = New Font("Microsoft Sans Serif", 12, FontStyle.Bold)
    13. newFrm.PB_NEW.Visible = True
    14. End If
    15. newFrm.LAB_UEBERSCHRIFT.Text = DR("BEZEICHNUNG").ToString
    16. newFrm.LAB_TEXT.Text = DR("BESCHREIBUNG").ToString
    17. newFrm.LAB_DATUM.Text = DR("DATUM").ToString
    18. anzNews += 1
    19. locNewsY += 49
    20. Next
    21. Panel1.Height = locNewsY
    22. End Sub



    kann mir jemand einen tipp geben?

    Danke

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

    Anstatt Forms zu nutzen, mach dir UserControl fertig, das kannst du dann dem Panel hinzufügen, dann wird das auch funktionieren. Top-Level Element(Ein Form ist ein Top-Level-Window) kannste nicht so als ChildControl zum Panel hinzufügen, hättest du versucht das via Panel.Controls.Add(theForm) zu machen anstatt mit der WinAPI, hättest du das sofort mit einer Exception quittiert bekommen.

    Ich empfehle dir auch anstatt des Panels ein FlowLayoutPanel zu nehmen, wenn da keine 2 Usercontrols nebeneinander passen, hast du einen Wrap und es sieht aus wie eine Liste. Brauchste dich nicht mal um die Positionen kümmern.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Takafusa“ ()

    Also, mit der P/Invoke-Funktion SetParent da holzhammermäßig dem Panel was unterzuschieben, ist schon rabiat. Da das allerdings dazu führt, dass die Forms zwar in Panel1 drinstecken, das davon aber nix mitbekommt (Panel1.Controls.Count = 0), ist das der falsche Weg. @Takafusa hat den richtigen Weg beschrieben. Ggf. das UC noch mit nem FlowLayoutPanel kombinieren und fertig ist der Lack.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ich arbeite derzeit viel mit WPF und XAML und da habe ich manchmal auch einen Moment der Irritation: Wenn ich mehr Fenster hinzufüge, sind andere nicht mehr sichtbar, bis mir einfällt, dass es entweder einen ScrollViewer braucht, der das Grundelement umgibt (um Scroll-Balken zur Verfügung zu stellen) oder das Grundelement besitzt selbst einen Scrollviewer und man muss unter Umständen die Visibility erst auf sichtbar stellen.

    Ich habe auch schon lange nicht mehr mit WinForms gearbeitet, aber ich meine, auch hier kann und muss man sich diesen Elementen bedienen (ich meine, hier heißen sie statt ScrollViewer ScrollBar). Denn dieses Element sorgt erst dafür, dass gescrollt werden kann.

    Und du musst - wie schon oben geschrieben - auch ein Control-Element nutzen, welches als Content andere Objekte aufnehmen kann (mehrere).