Tablelayoutpanel in Panel erstellen

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Tablelayoutpanel in Panel erstellen

    Hallo Leute,

    ich hoffe sehr Ihr könnt mir mal wieder Helfen!

    Ich habe ein Panel... in diesen Panel will ich ein Tablelayoutpanel erstellen ..... mit:

    - 2 Columns
    - 31 Rows

    in diesen "Tablelayoutpanel" sollen später einzelne Labels entstehen (ich sage jetzt mal Label 1 bis 62)

    hier mal mein Code: (hier wird das TableLayoutPanel erstellt)

    VB.NET-Quellcode

    1. Dim Tlp As New TableLayoutPanel
    2. Tlp.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single
    3. Tlp.Height = 905
    4. Tlp.Width = 329
    5. Tlp.ColumnCount = 2
    6. Tlp.RowCount = 30
    7. Panel1.Controls.Add(Tlp)


    Ergebnis: (Sieht sch.... aus!) <--- so sollte es nicht sein, warum ?

    Das ist mein Panel mit der TableLayoutPanel


    hoffe ihr könnt mir sagen warum es nur ein FETTER GRAUER Balken ist, und wie ich es geordnet bekomme ;( ?
    Bau das Ding im Designer nach und schau dann in der FormX.Deisgner.vb die Codeunterschiede zwischen Deinem und dem generierten Code an.
    Bei mir werden da nämlich z.B. noch zig Zeilen- und Spaltendefinitionen generiert, damit der Compiler auch weiß, wie das TLP proportioniert ist.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    2. Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    3. Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    4. Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    5. Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    6. Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    7. Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    8. Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    9. Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    10. Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    11. Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    12. Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    13. Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    14. Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    15. Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    16. Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    17. Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    18. Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    19. Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    20. Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    21. Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    22. Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    23. Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    24. Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    25. Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    26. Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    27. Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    28. Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    29. Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    30. Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    31. Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
    32. Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))



    ##########

    Noch was: Dieser graue Balken (ggf. mal die Farben in Deinem TLP ändern, dann sieht man etwas mehr) ist nicht eine Sache, sondern die Rahmen aller Zeilen. Und da die die Höhe null haben - solange Du nix anderes festlegst - bilden die Rahmen aller Zellen/Zeilen einen großen grauen Balken.
    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.

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

    ah okay, ..... ja bei mir natürlich auch ...

    habe das jetzt in Autosize = true gemacht (Panel & TableLayoutPanel)

    und der Abstand stimmt jetzt... erstmal danke für den Hinweis @VaporiZed ....


    Hier mal mehr, was es werden soll ....sowas wie ein Kalender, ich wähle per Combobox den Monat und per NumericUpDown das Jahr:

    Links und Rechts von beiden befinden sich zwei Buttons (vor und zurück)

    so sieht es jetzt aus:



    Wenn ich jetzt auf den Button vor (oben Rechts) klicke dann geht er einen Monat weiter....

    Klappt auch, aber warum dauert es so lange bis er das Neue TLP erstelt hat ? Gibts alternativen?
    Mach Zeitmessungen, wo wirklich der Wolf verbuddelt liegt. Selbst mit Panel-&Tlp-Autosize ist bei mir das in < 0.3s mit folgendem Code erledigt:

    VB.NET-Quellcode

    1. Dim tlp As New TableLayoutPanel
    2. tlp.RowCount = 31
    3. tlp.ColumnCount = 2
    4. For i = 0 To 30
    5. For j = 0 To 1
    6. tlp.Controls.Add(New Label With {.Text = $"{i}, {j}"}, j, i)
    7. Next
    8. Next
    9. Panel1.Controls.Add(tlp)
    10. tlp.AutoSize = True
    11. Panel1.AutoSize = True

    ggf. kann man mit Me.SuspendLayout vor Zeile#1 und Me.ResumeLayout nach der letzten Zeile n bisken was rausholen, aber das ist Spekulatius, ob das bei Dir was bringt.
    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.
    Das könnte man doch sicher auch mit einer mehrspaltigen Listbox (oder dergleichen) lösen.
    Ist bestimmt ressourcenschonender. Die Möglichkeit Einträge per Tastatur reinzuschreiben mit einen Link zu hinterlegen sollte auch gehen.

    Freundliche Grüsse

    exc-jdbi
    ListBox mehrspaltig? Per Tastatur beschreiben? Link hinterlegen? Bist Du gerade gedanklich bei nem DGV?
    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.
    Die DGV wäre sicher die beste Variante.

    Die mehrspaltige ListBox funkst aber auch. Es währen zwar keine echten Spalten, aber sehen genau gleich aus.
    codeproject.com/Articles/10852/Multi-Column-ListBox-Control

    Im Bild hat es so ausgesehen wie als ob man den Text nachträglich noch verändern (z.B. auch mit einem Link) kann, was ja in einem Kalender normal ist.
    Eine direkte Eingabe in den Items wäre wahrscheinlich nicht so sinnvoll. Dazu könnte man ein Dialog als Texteingabe machen.


    Freundliche Grüsse

    exc-jdbi
    @VBHunter Allgemein bei solchen Sachen: Erstell Dir eine entsprechende GUI im Designer,
    öffne die FormX.Designer.vb und sieh Dir an, was der Designer mit dem betreffenden Control anstellt: InitializeComponents().
    Das empfindest Du nach.
    Feddich.
    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!