Code ausführen, nachdem alle Controls geladen sind

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

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Code ausführen, nachdem alle Controls geladen sind

    Hallo,
    ich habe eine Funktion, welche mir alle sichtbaren (visible=True) Toolstripmenüitems in einem Menüstrip (bzw unterhalb eines Toolstripmenüitems im Menüstrip) auflisten soll. Nach meiner bisherigen Recherche müsste ich diese im Form_Shown Event ausführen. Leider scheinen hier die Toolstripmenüitems noch nicht geladen/angezeigt zu werden, da alle mit visible=false ausgegeben werden.
    Hier der Code, welcher im Form_Shown Event ausgeführt wird:

    VB.NET-Quellcode

    1. Dim recurse As Action(Of ToolStripMenuItem) =
    2. Sub(mnu As ToolStripMenuItem)
    3. For Each tmi As ToolStripMenuItem In mnu.DropDownItems
    4. If tmi.Visible = True Then
    5. End If
    6. recurse(tmi)
    7. Next
    8. End Sub
    9. recurse(Me.Menü2ToolStripMenuItem)


    Kurz zum Aufbau: Neues Projekt, Neue Form mit Menüstrip, hier ein Toolstripmenüitem angelegt und unter diesem weitere (teilweise verschachtelt). Außer dem Code oben gibt es keinen weiteren, es wurde auch kein Element auf visible=false gesetzt. Mir werden auch alle Elemente angezeigt.
    Hat jemand eine Idee? Hintergrund für das ganze: In meiner Anwendung gibt es massig Stammdaten, welche in den Toolstripmenüitems kategorisiert sind. Ich möchte aber ein Suchfeld implementieren, wo ich nach allen sichtbaren Elementen suchen kann (und dann das Click-Event auslösen, das klappt soweit). Allerdings sind halt aufgrund verschiedener Berechtigungen nicht alle Elemente für jeden sichtbar.

    Nachtrag: Gefühlt ist die Visible-Eigenschaft immer False. Selbst wenn ich deren Status Abfrage, wenn ich auf das Element klicke. Bug in VS2019?

    Gruß,
    AndPod

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

    @AndPod Menu-Items sind erst nach Aufklappen des Menüs sichtvar und damit .Visible = True.
    Probiere das, indem Du den Test in einer Timer-Tick ablaufen lässt und dann das Menü öffnest.
    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!