DirectCast auf UserControl auf TabPage mittel Namen

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

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

    DirectCast auf UserControl auf TabPage mittel Namen

    Ich steht gerade auf dem Schlauch.
    Ich habe ein TabControl (tabctl) mit vielen TabPages.
    4 von diesen TabPages heißen "tabpg_SPIHubCH1", "tabpg_SPIHubCH2" "tabpg_SPIHubCH3" und "tabpg_SPIHubCH4".
    Auf jeder dieser besagten TabPages ist ein UserControl vom Typ uc_SPI_SandBox.
    Die Namen dieser UserControls korrelieren mit den Namen der TabPage im Hinblick auf die Ziffer am Ende des Namenstrings.
    Also auf "tabpg_SPIHubCH1" befindet sich "UserControl_SPI_SandBox1" usw.
    Das UserControl hat eine Property.
    Ich bediene per For..Next-Schleife und DirectCast diese Property.

    VB.NET-Quellcode

    1. For _i As Integer = 1 To 4
    2. For Each _tc In Me.Controls.OfType(Of TabControl)()
    3. For Each _tp As TabPage In _tc.Controls.OfType(Of TabPage)()
    4. If _tp.Name = "tabpg_SPIHubCH" & _i.ToString("0") Then
    5. DirectCast(_tp.Controls("UserControl_SPI_SandBox_" & _i.ToString("0")), uc_SPI_SandBox).pProperty = True
    6. End If
    7. Next _tp
    8. Next _tc
    9. Next _i

    Das muss doch simpler zu lösen sein. Schließlich kenne ich die Namen der TabPages und der UserControls.
    Also irgendwie mit DirectCast auf die TabPage mittels Name, verschachtelt mit DirectCast auf das UserControl mittels Name.
    Ich habe jetzt schon alles Möglich probiert und drehe mich im Kreis.
    Nachfolgedes liefert mit "Wert von Typ "String" kann nicht in "uc_SPI_SandBox" konvertiert werden.

    VB.NET-Quellcode

    1. For _i As Integer = 1 To 4
    2. DirectCast(tabctl.TabPages(tabctl.TabPages.IndexOfKey("tabpg_SPIHubCH" & _i.ToString)), TabPage).Controls(DirectCast("UserControl_SPI_SandBox_" & _i.ToString, uc_SPI_SandBox)).bProperty = True
    3. Next _i

    Wo liegt mein Denk- oder Klammerfehler?

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

    Gegenfrage: Hast Du noch was anderes auf den TabPages als das UC? Falls nicht, kannst Du Dir ein wenig Code sparen, weil Du dann einfach das erste Control per TabPage nimmst und dieses in Dein UC castest.

    btw: Einfach mal in Scheibchen schneiden, dann wird's übersichtlicher:

    VB.NET-Quellcode

    1. Dim TabPage = tabctl.TabPages(tabctl.TabPages.IndexOfKey("tabpg_SPIHubCH" & _i.ToString))
    2. Dim UserControl = DirectCast(TabPage.Controls.Item("UserControl_SPI_SandBox_" & _i.ToString), uc_SPI_SandBox)
    3. UserControl.bProperty = True

    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.
    Danke für die schnelle Antwort.
    Ist nichts auf der TabPage außer dem UC.
    Kaum hatte ich den "Absenden" Knopf gedrückt, hab ich's herausgefunden:

    VB.NET-Quellcode

    1. DirectCast(tabctl.TabPages(tabctl.TabPages.IndexOfKey("tabpg_SPIHubCH" & _i.ToString)).Controls("UserControl_SPI_SandBox_" & _i.ToString), uc_SPI_SandBox).bProperty = True


    Einfach mal in Scheibchen schneiden, dann wird's übersichtlicher:

    Genau so kam ich auch zur Lösung: scheibchenweise.

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

    @roepke Verwende niemals die Namen, wenn Du Controls suchst.
    Gib Deinen UserControls spezifische Interfaces, die können leer sein und es können mehrere Interfaces pro UserControl sein.Liste dann aus der Menge der Parents diejenigen auf, die die entsprechenden Intzerfaces implementieren.
    Wie Du das machst, findest Du hier:
    Finden aller Controls mit gemeinsamer Basisklasse in einer Form mit TabControls
    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!