Indirekte Adressierung

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Indirekte Adressierung

    Hallo zusammen.

    Ich möchte Eigenschaften von z.B. Labels indirekt verändern.

    Ich möchte also nicht schreiben:
    lbl_1.Text = „Hallo“

    sondern so etwas wie:
    strLabelname = „lbl_“ + intNummer
    [strLabelname].Text = „Hallo“

    Ist so etwas in VB.Net möglich? Und wenn ja wie?
    @ErfinderDesRades

    Nun, wenn man in sehr vielen z.B. Labels eine Eigenschaft ändern will ist eine kleine FOR-Schleife sicher sinnvoller als eine schier endlose Liste gleicher Statements die sich nur durch den Labelnamen unterscheiden.

    ​Hilfreicher wäre es gewesen wenn Du auch geschrieben hättest wie das geht und warum das Deiner Meinung nach nicht empfehlenswert ist.
    Willkommen im Forum.

    Weil das Umbenennen der Steuerelemente immer möglich sein sollte, ohne dabei den Code kaputt zu machen. Wenn man merkt: »Uh, dieses Label ist aber besch…en benannt, da fällt mir ganz spontan ein besserer Name ein«, wäre bei Deinem Vorhaben die nächste Reaktion: »Aber halt, dann muss in den Code aber an x verschiedenen Stellen ändern, weil da ja der Name des Labels referenziert ist.«
    Meistens stellt sich dann auch bei genauer Problembeschreibung raus, dass der eingeschlagene Weg mit anderen Methoden viel effizienter zu lösen ist. Aber dafür fehlen uns die Infos, welches Grundproblem Du mit so vielen Labels zu lösen versuchst.

    der bitte-nicht-Lösungsweg

    Ach ja, dann doch noch ne vermeintliche, aber aus o.g. Gründen nicht empfehlenswerte Lösung: Me.Controls(DerName).Text = NeuerText. Solltest Du controlspezifischere Propertys ändern wollen, z.B. von einem Label die Property TextAlign, muss das Ganze vorher in den Zieltyp gecastet werden. DirectCast(Me.Controls(DerName), Label).TextAlign = ContentAlignment.BottomCenter

    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 2 mal editiert, zuletzt von „VaporiZed“ ()

    @VaporiZed

    Danke für Deinen Hinweis.

    Natürlich ist eine Namensänderung dann problematisch, aber meines Erachtens ist der Weg der indirekten Adressierung ein Irrweg wenn anschließend die Erkenntnis kommt dass ein Name geändert werden muss. Dann hat man sich über das was man tun will ganz offensichtlich zu wenig Gedanken gemacht.

    Es gibt bei mir auch gerade kein Grundproblem dass ich mit unzähligen Labels lösen will/muss. Ich beschäftige mich einfach gerade mit Visual Basic und versuche herauszufinden was geht und was nicht geht.

    Die Verwendung der indirekten Adressierung ist sicher keine Standardvorgehensweise, aber in manchen Fällen meines Erachtens unumgänglich. Mir ging es nur darum herauszufinden ob dies in Visual Basic überhaupt möglich ist.

    Nun weiß ich es, - Danke

    Marvin9263 schrieb:

    Nun, wenn man in sehr vielen z.B. Labels eine Eigenschaft ändern will ist eine kleine FOR-Schleife sicher sinnvoller als eine schier endlose Liste gleicher Statements die sich nur durch den Labelnamen unterscheiden.
    eine Schleife durch sehr viele Labels kannst du auch ohne String-Addressierung der Labels haben.
    Tu die Labels in ein Label-Array, und schon gehts los:

    VB.NET-Quellcode

    1. for each lb in myLabels
    2. lb.Text = "Hallo"
    3. next
    einfacher, effizienter, v.a. sicherer



    Marvin9263 schrieb:

    versuche herauszufinden was geht und was nicht geht
    Da kann ich nur dringend drauf hinweisen: Vieles vieles geht, was man aber es tunlichst lassen sollte.
    In solchen Fällen ist dir besser geholfen, wenn erfahrene Programmierer dir davon abraten, als dass sie dir iwas "unanständiges" beibringen, und dich somit auf einen Weg bringen, der langfristig in Teufels Küche führt.
    Sie raten ja auch nicht ersatzlos davon ab, sondern sind bereit, die andere, bessere Wege aufzuzeigen.
    Dafür mag sein sind weitere Informationen nötig.

    Also wenn eine Frage nicht gleich in deim Sinne beantwortet wird - nicht ärgerlich werden, sondern im Gegenteil: aufmerken - weil meist hats einen sinnvollen Grund.
    Oder anders: Wenn du dich ärgerst, weil "das ist nicht die Antwort auf meine Frage" - aufmerken! - weil: meist ist es das doch.

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