Simple Möglichkeit eine Eigenschaft auf mehrere Objekte zu setzen?

  • VB.NET
  • .NET 4.5

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Trade.

    Simple Möglichkeit eine Eigenschaft auf mehrere Objekte zu setzen?

    Gibt es eine einfachere Möglichkeit bei mehreren Labels z.B. den BorderStyle zu ändern als für jedes Label einzeln den Command zu schreiben?

    Beispiel:
    Anstatt dem ganzen für lblLine1_2 bis lblLine4_4 einen Command

    Quellcode

    1. ​lblLine1_1.BorderStyle = BorderStyle.Fixed3D
    2. lblLine1_2.BorderStyle = BorderStyle.FixedSingle
    3. lblLine1_3.BorderStyle = BorderStyle.FixedSingle
    4. lblLine1_4.BorderStyle = BorderStyle.FixedSingle
    5. lblLine2_1.BorderStyle = BorderStyle.FixedSingle
    6. lblLine2_2.BorderStyle = BorderStyle.FixedSingle
    7. lblLine2_3.BorderStyle = BorderStyle.FixedSingle
    8. lblLine2_4.BorderStyle = BorderStyle.FixedSingle
    9. lblLine3_1.BorderStyle = BorderStyle.FixedSingle
    10. lblLine3_2.BorderStyle = BorderStyle.FixedSingle
    11. lblLine3_3.BorderStyle = BorderStyle.FixedSingle
    12. lblLine3_4.BorderStyle = BorderStyle.FixedSingle
    13. lblLine4_1.BorderStyle = BorderStyle.FixedSingle
    14. lblLine4_2.BorderStyle = BorderStyle.FixedSingle
    15. lblLine4_3.BorderStyle = BorderStyle.FixedSingle
    16. lblLine4_4.BorderStyle = BorderStyle.FixedSingle
    Du könntest folgendes machen.
    Eine list of label erstellen:
    (Als klassendeklaration direkt unter Public Class Form1)

    VB.NET-Quellcode

    1. Dim labelisting As New List(Of Label)


    im formload könntest du dann alle labels in deine liste adden:

    VB.NET-Quellcode

    1. labelisting.Add(lblLine1_1)
    2. labelisting.Add(lblLine1_2)
    3. labelisting.Add(lblLine1_3)
    4. labelisting.Add(lblLine1_4)
    5. usw.


    Und dann halt:

    VB.NET-Quellcode

    1. For Each lbl As Label In labelisting
    2. lbl.BorderStyle = BorderStyle.FixedSingle
    3. Next




    Oder alle labels in ein panel reinpacken und dann alle controls of type label durchlaufen, wäre auch ne möglichkeit.
    Hier könnte meine Signatur stehen.
    Oder wenn die Labels eh alle direkt auf der Form liegen, per ForEach durch die .Controls Property der Form iterieren, mithilfe von as und einer Nullprüfung die Controls auf Label casten, und dann entsprechend anpassen.

    Andere Frage, Wozu so viele Labels?
    Post-AGB:
    §1 Mit dem Lesen dieses Posts stimmst du den AGB unverzüglich zu
    §2 Ein Widerruf muss innerhalb von 3 Sekunden nach Lesen des Hauptbestandteil des ersten jemals gelesenen Posts erfolgen
    Abs.1 Die Signatur zählt nicht zum Hauptbestandteil des Posts
    §3 Ein erfolgreicher Widerruf zwingt zu einem Besuch bei einem Hypnotiseur oder Neurochirurg, sodass der gelesene Text aus den Erinnerungen entfernt werden kann
    Abs.1 Die Kosten und Risiken sind jeweils selbst zu tragen

    EaranMaleasi schrieb:

    mithilfe von as und einer Nullprüfung die Controls auf Label casten


    tut es da die nicht auch die Abfrage if TypeOf(ctrl) = Label?
    Oder überseh ich da grad was?
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    kommt auf selbe raus:
    C#

    C#-Quellcode

    1. foreach (var item in frmMyForm.Controls)
    2. {
    3. Label lb = item as Label;
    4. if (lb != null)
    5. lb.Text = "blargh";
    6. }
    7. foreach (var item in frmMyForm.Controls)
    8. {
    9. if (typeof(item) == Label)
    10. {
    11. Label lb = (Label)Label;
    12. lb.Text = "blargh";
    13. }
    14. }

    'VB.NET mithilfe eines Converters

    VB.NET-Quellcode

    1. For Each item As var In frmMyForm.Controls
    2. Dim lb As Label = TryCast(item, Label)
    3. If lb IsNot Nothing Then
    4. lb.Text = "blargh"
    5. End If
    6. Next
    7. For Each item As var In frmMyForm.Controls
    8. If TypeOf(item) = Label Then
    9. Dim lb As Label = DirectCast(Label, Label)
    10. lb.Text = "blargh"
    11. End If
    12. Next


    Edit:
    mir ist eingefallen, mit C#6 könnte man das noch kompakter schreiben:

    C#-Quellcode

    1. foreach (var item in frmMyForm.Controls)
    2. {
    3. (item as Label)?.Text = "blargh";
    4. }


    Edit2: Oder es wie @Trade machen ^^
    Post-AGB:
    §1 Mit dem Lesen dieses Posts stimmst du den AGB unverzüglich zu
    §2 Ein Widerruf muss innerhalb von 3 Sekunden nach Lesen des Hauptbestandteil des ersten jemals gelesenen Posts erfolgen
    Abs.1 Die Signatur zählt nicht zum Hauptbestandteil des Posts
    §3 Ein erfolgreicher Widerruf zwingt zu einem Besuch bei einem Hypnotiseur oder Neurochirurg, sodass der gelesene Text aus den Erinnerungen entfernt werden kann
    Abs.1 Die Kosten und Risiken sind jeweils selbst zu tragen

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

    Oder gleich die OfType-Extension nutzen. ;)

    C#-Quellcode

    1. foreach (var item in frmMyForm.Controls.OfType<Label>())
    2. {
    3. item.Text = "bla";
    4. }


    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!: