Control wieder finden?

  • VB.NET

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

    Control wieder finden?

    Hallöchen Leute,

    ich bin gerade am rumprobieren und stehe etwas auf dem Schlauch. Ich habe eine Testanwendung, diese erstellt auf Knopfdruck in einem Tab-Control eine neue Tab und in dem Tab eine Textbox, das funktioniert auch soweit ganz gut. Nun ist die Frage, wie finde ich auf der aktuellen Tab-Page heraus wie die Textbix heißt? Der Coode für die Textbox sieht so aus:

    VB.NET-Quellcode

    1. Dim TextBox As New TextBox
    2. TextBox.Name = "T_Box" & Me.Tab_Control.TabCount + 1
    3. TextBox.Text = "Testen"
    4. Tab_Control.Controls.Add(TextBox)

    Das heißt die Textbox heißt dann z.B. T_Box1, wie kann ich nun wieder ihre .Text Eigenschaft ansprechen, also während der Laufzeit? Ich hänge da gerade total fest :|
    (ps. der VbCode macht irgendwie was er will heut)
    : NV Updater | Nvidia Driver Update Tool
    Falls du es nicht mit einer Schleife lösen willst, hätte ich eine andere Idee:

    VB.NET-Quellcode

    1. Dim TempTextBox as TextBox = Me.Panel1.Controls("T_Box1")
    2. TempTextBox.Text = "Irgendwas anderes"


    Hoffe es funktioniert, habs nur schnell mal aus dem Kopf geschrieben :D

    MfG BlackHoleW13

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

    TTX.exe schrieb:

    Nun ist die Frage, wie finde ich auf der aktuellen Tab-Page heraus wie die Textbix heißt?

    Du verwechselt den Bezeichner mit der Name-Property.
    Für im Designer erstellte Controls generiert der Designer immer eine Variable auf Klassenebene, und die hat natürlich einen Bezeichner - Textbox1, Textbox2 etc..
    Genau aufpassen: Die Variable hat den Bezeichner - nicht die Textbox.
    Tatsächlich existieren Bezeichner zur Laufzeit ühaupt nicht mehr. Bezeichner existieren nur im SourceCode, im Gegensatz zum Bezeichneten, welches zur Laufzeit existiert.

    Jo, bei dynamisch erzeugten Controls gibts bestenfalls eine lokale Variable (mit ihrem Bezeichner).
    In deinem Beispiel hast du den Bezeichner "Textbox" gewählt.
    Ist auch egal, denn wenn die Methode durchgelaufen ist, dann existiert die Variable "Textbox" nicht mehr, und also auch nicht mehr ihr Bezeichner.

    Die .Name-Property des Textbox-Objektes hingegen hat mit dem Variablen-Bezeichner rein gar nix zu tun. .Name ist eine ungeschickt benannte Property, (eigentlich ganz ohne Nutzen, glaub mir).

    Also wie man auf die dynamisch erstellte Textbox zugreift, sind ja schon paar Vorschläge gemacht worden.
    Falls Du eine besondere Property suchst, mit der Du Controls unterscheiden möchtest, kannst Du auch Control.Tag verwenden.
    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!
    Also ich komme mit dem Problem nicht weiter, ich will doch nur die Textbox ansprechen könne aber nur auf der aktiven Tab... wie die nachher heißt ist mir eigentlich egal. Ich brüte gerade ein Programm aus in der ich so eine Funktion brauchen könnte und wollte das erstmal an einer Textbox testen... :wacko:
    : NV Updater | Nvidia Driver Update Tool

    VB.NET-Quellcode

    1. Private Sub Button_Click(ByVal sender As Object, ByVal e As EventArgs) _
    2. Handles Button2.Click, Button1.Click
    3. Dim textboxKey = "LKJLjjs" 'einen auf der Tabpage eindeutigen schlüssel
    4. Select Case True
    5. Case sender Is Button1
    6. Dim tb As New TextBox
    7. tb.Name = textboxKey
    8. tb.Text = "Testen" & TabControl1.TabCount
    9. Dim tp = New TabPage
    10. tp.Text = TabControl1.TabCount.ToString
    11. tp.Controls.Add(tb)
    12. TabControl1.TabPages.Add(tp)
    13. Case sender Is Button2
    14. Dim tb = DirectCast(TabControl1.SelectedTab.Controls(textboxKey), TextBox)
    15. MsgBox(tb.Text)
    16. End Select
    17. End Sub