Wie kann ich eine Zeichenkette(String) in oder als Objektname zuweisen bzw. umwandeln?

  • VB.NET

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

    Wie kann ich eine Zeichenkette(String) in oder als Objektname zuweisen bzw. umwandeln?

    Hallo Leute!

    Ich komme gleich zur Sache?

    Ich habe in meiner Form ein Label: Label1


    Ich erstelle mir eine Zeichenkette:

    VB.NET-Quellcode

    1. Dim Labelname As String = "Label" & 1



    Also Labelname ist jetzt = "Label1"

    Wie schaffe ich es Labelname in ein Objektname zu konvertieren, damit ich auf die properties zugreifen kann z.B. Label1.Text :?:

    Anscheinend funktioniert es mit DirectCast, aber ich komme einfach nicht weiter!

    Nein eigentlich ist es noch einfacher!

    Nein eigentlich ist es noch einfacher!

    Es gibt in meiner Form bereits ein Label namens Label1

    Eigentlich gibt es 10 Labels also : Label1 bis Label10

    Jetzt erstelle ich mir eine Variable vom Typ String zusammen:
    Dim Labelname as String = "Label" & 1

    Diese Variable möchte ich jetzt umwandeln, damit ich Zugriff auf Labal1.Text habe
    @VBuchner: Arbeitest Du mit dynamisch erzeugten Controls oder willst Du Dir ledoglich das vorhandene Control mit dem Namen "Bla" holen :?:
    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!

    In der Formanwendung funktioniert es

    Hallo ich glaube ich habe ein wichtiges Detail vergessen:

    Ich arbeite hier mit ASP Webform.

    Jetzt habe ich es in einer Formanwendung versucht und es funktioniert.

    In meiner Webform bzw. ascx.vb bekomme ich die Fehlermeldung:
    Ungültige Konvertierung von der Zeichenfolge Label1 in Typ Integer.
    Code:

    VB.NET-Quellcode

    1. Dim labelname As String = "Label" & 1
    2. Dim lblName = DirectCast(Me.Controls(labelname), Label)


    Die Labels werden nicht dynamisch erzeugt sondern sind in meiner .ascx bereits vorhanden.
    Direkte abfrage funktioniert auch: MsgBox(Label1.Text)
    Vielleicht erklärst du noch mal kurz den Sinn, des so zusammengestellten ansprechens....
    Warum nicht direkt ansprechen?
    willst du mit allen nacheinander das gleiche machen?
    dann vielleicht for..each
    Spoiler anzeigen

    VB.NET-Quellcode

    1. for each lbl in {Label1, Label2, Label....}
    2. 'mach wat
    3. next

    oder

    VB.NET-Quellcode

    1. for each lbl as Label in Me.Controls.OfType(of Label)()
    2. 'mach wat
    3. next

    ansonsten schau dir mal im Objectbrowser an, wie du in ASP die Label per namen adressieren kannst
    OK Ich versuche es!

    Ich habe in meiner Webform Label plaziert:
    Die Labels bekommen Dynamisch einen Text zugewiesen.

    z.B.

    lblPersonE1.Text ="Franz"
    lblPersonK1.Text="Margit"

    'Hier würde ich gerne auf das Objekt Label.Text zugreifen

    VB.NET-Quellcode

    1. Dim Personen() As String = {"E1", "E2", "K1", "K2", "K3", "K4", "K5", "K6", "K7", "K8", "K9", "K10"}
    2. For Each Person1 As String In Personen
    3. Dim labelname As String = "lblPerson" & Person1
    4. Dim lblVKPerson = DirectCast(Me.Controls(labelname), Label)
    5. MsgBox(lblVKPerson.Text)
    6. Next


    Leider funktioniert das nicht so wie ich mir das vorstelle :?:

    Hat sich erledigt!

    Mit TryCast hat es funktioniert

    VB.NET-Quellcode

    1. Dim labelname As String = "Label" & 1
    2. Dim lblPerson = TryCast(Me.FindControl(labelname), Label)


    Aber ehrlich gesagt weiß ich noch nicht warum genau?
    Vielleicht liegt es daran, dass es sich um ein UserControl handelt.

    VBuchner schrieb:

    Also Labelname ist jetzt = "Label1"

    Wie schaffe ich es Labelname in ein Objektname zu konvertieren, damit ich auf die properties zugreifen kann z.B. Label1.Text :?:

    Dassis ein kapitaler Denkfehler, bei dem 2 ganz verschiedene Ebenen vermischt werden.

    "Objektnamen" sind die Bezeichner, mit denen man Code schreibt. Zur Laufzeit gibt es keine Objektnamen, sondern da agiert das zur Designzeit mit den Objektnamen bezeichnete.

    Du wirst also niemals aus einem String einen Objektnamen basteln können, jdfs. nicht in den .Net-Sprachen.