none
Unterschied zwischen dropdownItem und ToolstripmenuItem? RRS feed

  • Frage

  • Hab so ein Verständnisproblem bei der Menüstruktur:

    Menu1

         hat Menu1Sub1

               Menu1Sub2

                   hat menu1Sub2sub1

                         menu1Sub2Sub2

    All das sind Toolstripmenuitems - Korrekt?

    menu1.dropdownItem(0) ist dann Menu1Sub1 - Korrekt?

    Ist menu1.dropdownitem(0)  nicht auch ein ToolstripmenuItem?

    warum geht dann nicht:

    menu1.dropdownItem(1).dropdownItem(0)? (sollte m.E. auf menu1Sub2sub1 verweisen.

    oder aber:

    wie bekomme ich eine Auflistung der Toolstripmenu-ChildItems von Menu1Sub2? (es gibt sowas wie ChildItems ja nicht)

    Was ist der Unterschied zwischen einem DropdownItem und einem ToolstripmenuItem? Ist das nicht dasselbe?

    Sorry ist vll etwas trivial...

    TH

    Dienstag, 23. April 2013 22:12

Alle Antworten

  • Hallo,

    Beim Menustrip und dem ToolStrip hat man sich die Vererbung zu Nutze gemacht, da sie viele Eigenschaften teilen und im Verhalten ähnlich sind.

    Das ToolStripDropDownItem ist die Basis für Elemente, die in einem DropDown erscheinen können. Sie verwalten die untergeordneten Elemente in der DropDownItems Auflistung.

    Das ToolStripMenuItem stellt zusätzliche Eigenschaften für die Darstellung als Standard-Menüelement bereit. Andere Varianten wären ein DropDownButton oder ein SplitButton.

    Durchlaufen kann man ein Menü z. B. so:

        Public Shared Sub TraverseMenuItems(items As ToolStripItemCollection, level As Integer)
            For Each item As ToolStripItem In items
                Console.Write("".PadRight(level * 4))
                Console.WriteLine("{0} - {1} / {2}", item.Text, item.Name, item.GetType())
                If TypeOf item Is ToolStripDropDownItem Then
                    Dim dropDownItem = DirectCast(item, ToolStripDropDownItem)
                    TraverseMenuItems(dropDownItem.DropDownItems, level + 1)
                End If
            Next
        End Sub
    

    Und für das Hauptmenü (hier mainMenu) aufgerufen als:

    TraverseMenuItems(mainMenu.Items, 0)

    Beim MenuStrip heisst die Eigenschaft Items, unterhalb dann DropDownItems.

    Gruß Elmar

    Mittwoch, 24. April 2013 08:04
    Beantworter
  • Danke erstmal Elmar.

    Ich versuch zu verstehen:

    ToolStripMenuItem ist einer von mehreren Mitgliedern von ToolstripDropDownItems?

    In deinem Code kommt dann plötzlich ToolstripItem vor. Wo ist das denn einzuordnen?

    Ich habe getestet:
    Menu1.dropdownitems(1).gettype.tostring gibt ....ToolstripmenuItem aus.

    Warum funktioniert dann
    Menu1.dropdownItems(1).dropdownItems(0) nicht?
    (Fehlermeldung hier: dropdownitems ist kein Member von System.windows.forms.ToolstripItem". Dabei schreibt mir VB vorher - s.o. - Dropdownitems(1) ist vom Typ her ein ToolstripmenuItem.)

    Mittwoch, 24. April 2013 12:59
  • Hallo,

    schau Dir mal den Abschnitt "Vererbungshierarchie" in der Dokumentation an.

    Geliefert wird als Auflistung eine TookStripItemCollection, worüber man ToolStripItem - die Basisklasse - erhält. Deswegen ist ein Cast notwendig, wie auch ich ihn im Beispiel verwendet habe.

    Gruß Elmar

    Mittwoch, 24. April 2013 13:25
    Beantworter