Nanseigenschaft von Steuerelementen

  • VB.NET

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

    Nanseigenschaft von Steuerelementen

    Hallo zusammen!

    Ich hab mich folgendes gefragt:

    Angenommen ich hab mehrere Labels

    Label1
    Label2
    Label3

    Und ich möchte in jedes Label den selben Text schreiben:

    "Ich bin ein Label"

    Klar ich könne jedes Label direkt ansprechen. Aber geht das auch durch eine For Schleife, indem ich auf den Labelnamen zugreife?
    Wäre praktisch, wenn man viele Steuerelemente hat, bei denen man etwas ändern möchte, die aber in ihrer name Eigenschaft durchnummeriert sind.

    Danke schon mal :)
    Du kannst mit der For-Each-Schleife jedes Element einer Auflistung durchlaufen.
    Die Labels auf deiner Form sind auch Elemente einer Auflistung: der Controls-Collection des jeweiligen Containers.

    Soll heißen: Alle Controls, die auf deiner Form plaziert sind, sind in der Me.controls-Collection.

    VB.NET-Quellcode

    1. For Each dummyname in Me.Controls
    2. if Typeof(dummyname) is label
    3. ctype(dummyname,label).text="Ich bin ein Label"
    4. End if
    5. next


    Wenn die Labels in einem anderen Container angeordnet sind (Groupbox, Panel, usw.), dann musst du deren Controls-Collection durchgehen (zB. Panel1.Controls)

    LG, der_Kurt
    Als Alternative könntest du auch das nehmen (nicht getestet):

    VB.NET-Quellcode

    1. For i as Integer = 0 To 3
    2. Me.Controls ("Label" & i.ToString).Text = "Ich bin ein Label")
    3. Next

    Da musst du dann halt wissen, wie viel Labels diese Kriterien erfüllen. Im Allgemeinen ist die Variante von der_Kurt zwar schöner und zuverlässiger. Das geht bei vielen Controls aber auf die Geschwindigkeit.

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

    @TheoTechnic
    ich hab deinen code zwar auch nicht getestet, aber ändert der nur bei 3 label den text, oder?
    mein code hätte so ausgesehen:

    VB.NET-Quellcode

    1. For Each lbl As Label In Me.Controls
    2. lbl.Text = "Ich bin ein Label!"
    3. Next


    lg Gugi
    und dein Code wird nicht funktionieren...:

    VB.NET-Quellcode

    1. For Each c As Control In Me.Controls
    2. If TypeOf(c) Is Label Then
    3. Dim lbl As Label = DirectCast(c,Label)
    4. lbl.Text = "Ich bin ein Label!"
    5. End If
    6. Next
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    jvbsl schrieb:

    und dein Code wird nicht funktionieren...:

    VB.NET-Quellcode

    1. For Each c As Control In Me.Controls
    2. If TypeOf(c) Is Label Then
    3. Dim lbl As Label = DirectCast(c,Label)
    4. lbl.Text = "Ich bin ein Label!"
    5. End If
    6. Next

    ich hab meinen code vorher getestet, und er funktioniert ohne probleme...

    lg Gugi

    VB.NET-Quellcode

    1. For Each lbl As Label In Me.Controls
    2. lbl.Text = "Ich bin ein Label!"
    3. Next
    @gugi: Dieser Code wird problematisch, wenn ein Steuerelement vorhanden ist, welches kein Label ist.
    Die Typeof-Abfrage habe ich ja nicht ohne Sinn dazugeschrieben.

    VB.NET-Quellcode

    1. For Each dummyname In Me.Controls
    2. If Typeof(dummyname) Is Label Then
    es würde auch mit LinQ gehen,

    VB.NET-Quellcode

    1. For Each lbl As Label In From p In Me.Controls Where TypeOf p Is Label
    2. lbl.Text = "Ich bin ein Label"
    3. Next
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---