Control-Eigenschaften in Each-Schleife

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

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Normen.

    Control-Eigenschaften in Each-Schleife

    Hallo zusammen,
    in meinem Projekt habe ich auf der Form einen Splitcontainer, darunter ein TabControl. In den einzelnen Tabpages wiederum Label und Textboxen.
    In der Vergangenheit habe ich alle die Eigenschaften dieser Controls einzeln gesetzt. Ich möchte nun den Code optimieren und habe mir dazu eine verschachtelte Each-Schleife gebaut.

    VB.NET-Quellcode

    1. For Each StCont In FormTZ.Controls
    2. If TypeOf StCont Is TabControl Then
    3. For Each pag In DirectCast(StCont, TabControl).Controls
    4. If TypeOf pag Is TabPage Then
    5. DirectCast(pag, TabPage).BackColor = col_Tab
    6. DirectCast(pag, TabPage).BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
    7. DirectCast(pag, TabPage).Font = font_Label
    8. DirectCast(pag, TabPage).UseVisualStyleBackColor = True
    9. DirectCast(pag, TabPage).MinimumSize = New System.Drawing.Size(int_Grid_W, int_Grid_H)
    10. DirectCast(pag, TabPage).Size = New System.Drawing.Size(int_Grid_W, int_Grid_H)
    11. For Each lbl In DirectCast(pag, TabPage).Controls
    12. If TypeOf lbl Is Label Then
    13. DirectCast(lbl, Label).BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
    14. DirectCast(lbl, Label).BackColor = col_Label
    15. DirectCast(lbl, Label).Font = font_Label
    16. DirectCast(lbl, Label).MinimumSize = New System.Drawing.Size(int_lbl_w, int_lbl_h)
    17. DirectCast(lbl, Label).Size = New System.Drawing.Size(int_lbl_w, int_lbl_h)
    18. DirectCast(lbl, Label).TextAlign = System.Drawing.ContentAlignment.MiddleLeft
    19. End If
    20. If TypeOf lbl Is TextBox Then
    21. DirectCast(lbl, TextBox).Font = font_Foretext
    22. DirectCast(lbl, TextBox).Size = New System.Drawing.Size(int_tx_w, int_tx_h)
    23. End If
    24. Next
    25. End If
    26. Next
    27. End If
    28. Next


    Das Ergebnis ist allerdings nicht zu meiner Zufriedenheit, bei den TabPages funktioniert es. Die Label und Textboxen entsprechen allerdings nicht mehr der ursprünglichen händischen Einstellung - siehe Bild.


    Die ersten Zeilen sind mit der Each-Schleife erstellt, die dahinter händisch
    Was muss ich korrigieren.
    Freue mich über eure Hilfe

    Norbert
    Bilder
    • Screen_01.jpg

      14,31 kB, 240×221, 99 mal angesehen

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

    Bitte auf dem Bild genau definieren, welche Zeilen mit der Schleife verändert wurden und wie die aussehen sollen. Das geht aus der Beschreibung nicht hervor.

    btw: die Typprüfung kannst Du folgendermaßen weglassen: .OfType(Of X) gibt Dir nur die Teile von einem bestimmten Typ und dann noch als den gewünschten Typ zurück.

    VB.NET-Quellcode

    1. For Each TabControl In FormTZ.Controls.OfType(Of TabControl)
    2. For Each TabPage In TabControl.Controls.OfType(Of TabPage)
    3. TabPage.BackColor = col_Tab
    4. TabPage.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
    5. TabPage.Font = font_Label
    6. TabPage.UseVisualStyleBackColor = True
    7. TabPage.MinimumSize = New System.Drawing.Size(int_Grid_W, int_Grid_H)
    8. TabPage.Size = New System.Drawing.Size(int_Grid_W, int_Grid_H)
    9. For Each Label In TabPage.Controls.OfType(Of Label)
    10. Label.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
    11. Label.BackColor = col_Label
    12. Label.Font = font_Label
    13. Label.MinimumSize = New System.Drawing.Size(int_lbl_w, int_lbl_h)
    14. Label.Size = New System.Drawing.Size(int_lbl_w, int_lbl_h)
    15. Label.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
    16. Next
    17. For Each TextBox In TabPage.Controls.OfType(Of TextBox)
    18. TextBox.Font = font_Foretext
    19. TextBox.Size = New System.Drawing.Size(int_tx_w, int_tx_h)
    20. Next
    21. Next
    22. Next

    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.