Listbox dynamisch ansprechen

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    Listbox dynamisch ansprechen

    Hi,ich bin total auf dem Schlauch.Ich habe mehrere Listboxen, die sich in einem Tabcontrol befinden.Alle Listboxen fangen mit dem gleichen Namen an "Liste" und unterscheiden sich nur aus dem Ende.Das Ende lese ich aus einer Textbox aus, welche Deutsch,Englisch,Spanisch,etc. heißt, so dass sie zum Schluss ListeDeutsch,etc. heissen.Me.controls("Liste" & txtsprache.text) klappt nicht.Wie kann ich dynamisch die gewollte Listbox auslesen? Ich blicks net. Könnt ihr mir helfen? Habt ihr eine Idee? Ich verzweifel
    @Svenundmel Anders:

    VB.NET-Quellcode

    1. Dim lbx() = { ListBox1, ListBox2, ListBox3, ListBox4, ListBox5 }
    2. MessageBox.Show(lbx(1).Items(0).ToString())
    3. For Each lb In lbx
    4. Console.WriteLine(lb.Items.Count)
    5. Next
    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!
    Auch wenn deine Frage beantwortet wurde, könntest du das Ganze auch so gestalten, dass du Reflections verwendest.


    VB.NET-Quellcode

    1. ​Module Module1
    2. dim list1 As List(Of string)
    3. Dim list2 As List(Of string)
    4. dim list3 As List(Of string)
    5. ' ...
    6. Sub Main()
    7. Dim type = GetType(Module1)
    8. Dim fields = From type In type.GetFields()
    9. Where type.Name.ToLowerInvariant().StartsWith("list")
    10. for each field in fields
    11. Dim _field As List(Of string)
    12. _field = field.GetValue(nothing)
    13. ' Do stuff with field
    14. Next
    15. End Sub
    16. End Module


    Dann könntest du wirklich dynamisch deine Listen ansprechen und kannst dann theoretisch immer mehr hinzufügen, ohne dass du daran denken musst, dein Array zu erweitern :)
    "Nichts ist unendlich, bis auf die menschliche Dummheit" - Albert Einstein
    "Man sollte nicht alles vertrauen, was im Netz steht" - Abraham Lincoln
    @BeatsleigherXDA Leider sagt meine Quellcode-Kontrollorgane Codeanalyse und ReSharper, dass ich die Namensgebungen listX ändern soll.
    Soll ich nun auf Dich hören oder auf meine Quellcode-Kontrollorgane?
    Wie wäre Dein Code zu ändern, wenn ich auf meine Quellcode-Kontrollorgane höre?
    Wieso dimensionierst Du eine Variable _field vom Typ List(Of string), wenn Du ohne die Kenntnis des Type zwei Zeilen höher deren Namen verwendest?
    Wie wäre Dein Code zu ändern, wenn ich Deine Variablen listX als List eines anderen Typs deklariere?
    Und:
    Einstein sagte:
    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!
    @RodFromGermany

    Das Beispiel dient lediglich dazu, zu verdeutlichen, was ich meine.
    Es ist kein Quellcode, den man ohne Bearbeitung in sein Projekt einbringen sollte. Zudem bin ich eher der C#-Mensch. Mit VB mache ich nichts mehr, kann daher sein, dass das, was ich geschrieben habe, falsch ist. Im Grunde sollte das Beispiel funktionieren und Rider hat das nicht bemängelt.
    "Nichts ist unendlich, bis auf die menschliche Dummheit" - Albert Einstein
    "Man sollte nicht alles vertrauen, was im Netz steht" - Abraham Lincoln