ContextMenuStrip-Items während der Laufzeit hinzufügen

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von woeh.

    ContextMenuStrip-Items während der Laufzeit hinzufügen

    hallo,

    ich möchte gerne Subitems eines ContextMenuStrips während der Laufzeit hinzufügen.
    Leider fand ich in Intellisense keine Funktion dazu.

    Ein normales Item hinzufügen ist ja nicht schwer:

    VB.NET-Quellcode

    1. ContextMenuStrip.Items.Add("Blä")


    Mit SubItem meine ich jedoch ein extra-Menü, dass aufklappt wenn man auf den Pfeil eines Menuitems klickt/darüberfährt.

    Hoffentlich versteht ihr was ich meine, sonst ladt ich noch nen Screen hoch...

    //EDIT:
    hi,

    wie wärs denn hiermit :D

    VB.NET-Quellcode

    1. Dim item As New ToolStripMenuItem("Item Text")
    2. item.DropDownItems.Add("Sub Item Text")
    3. ContextMenuStrip1.Items.Add(item)


    greetz

    flo.exe

    flo.exe schrieb:

    hi,

    wie wärs denn hiermit :D

    VB.NET-Quellcode

    1. Dim item As New ToolStripMenuItem("Item Text")
    2. item.DropDownItems.Add("Sub Item Text")
    3. ContextMenuStrip1.Items.Add(item)


    greetz

    flo.exe
    Er möchte aber so vermute ich während dem Ablauf einem vorhandenen Item Unterpunkte hinzufügen.

    Dazu müsste er global eine Variable deklarieren und diese müsste beim Starten der Form ein Item anlegen und nachher kann er währen dem Ablauf über

    VB.NET-Quellcode

    1. locItem.SubItems.Add("Test")


    neue Unterpunkte einfügen.
    A danke^^, habe jetzt in etwa diesen Quelltext:

    VB.NET-Quellcode

    1. Public Property MoveList As New ToolStripMenuItem("Verschieben", My.Resources.User1)
    2. Public Property lList As New List(Of List)
    3. Public Property snList As New List(Of String)
    4. Public Sub RefreshList()
    5. snList.Clear()
    6. UserList.Items.Clear()
    7. MoveList.DropDownItems.Clear()
    8. For Each Item As List In lList
    9. snList.Add(Item.Name)
    10. UserList.Items.Add("~{" & Item.Name & "}~")
    11. MoveList.DropDownItems.Add(Item.Name)
    12. AddHandler MoveList.DropDownItems.Item(MoveList.DropDownItems.Count - 1).Click, AddressOf MoveUser_Click
    13. For Each User As User In Item.Users
    14. snList.Add(User.Username)
    15. UserList.Items.Add(User.FullName)
    16. Next
    17. Next
    18. End Sub
    19. Public Sub MoveUser_Click()'Hier möchte ich einen Parameter anhengen.
    20. End Sub


    Ich würde aber gerne da einen Parameter benutzen, nur bei AddressOf MoveUser_Click können nur Subs ohne Parameter verwendet werden. Wie kann ich da doch einen Parameter verwenden?
    So sieht die Lösung bei mir aus.

    VB.NET-Quellcode

    1. Public Property MoveList As New ToolStripMenuItem("Verschieben", My.Resources.User1)
    2. Public Property lList As New List(Of List)
    3. Public Property snList As New List(Of String)
    4. Public Sub RefreshList()
    5. snList.Clear()
    6. UserList.Items.Clear()
    7. MoveList.DropDownItems.Clear()
    8. For Each Item As List In lList
    9. snList.Add(Item.Name)
    10. UserList.Items.Add("~{" & Item.Name & "}~")
    11. MoveList.DropDownItems.Add(Item.Name)
    12. AddHandler MoveList.DropDownItems.Item(MoveList.DropDownItems.Count - 1).Click, AddressOf MoveUser_Click
    13. For Each User As User In Item.Users
    14. snList.Add(User.Username)
    15. UserList.Items.Add(User.FullName)
    16. Next
    17. Next
    18. End Sub
    19. Public Sub MoveUser_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    20. Dim Username As String = snList.Item(UserList.SelectedIndex)
    21. For Each Item As List In lList
    22. For Each User As User In Item.Users
    23. If User.Username = Username Then
    24. For Each Itm As List In lList
    25. If Itm.Name = sender.Text Then 'Hier wird der Parameter verwendet.
    26. Itm.Users.Add(User)
    27. Exit For
    28. End If
    29. Next
    30. Item.Users.Remove(User)
    31. Exit For
    32. End If
    33. Next
    34. Next
    35. RefreshList()
    36. End Sub
    Mach am besten Option Strict auf On.

    VB.NET-Quellcode

    1. Private Sub ContextMenuStrip1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ContextMenuStrip1.Click
    2. Dim toolstripitem As ToolStripItem = Nothing
    3. toolstripitem = CType(toolstripitem, ToolStripItem)
    4. End Sub
    Habe Option Strict dauerhaft auf On.

    Habe es sogar so hinbekommen, dass man nicht für das ganze ContextMenu die Buttons einzeln deklarieren muss sondern nur das eine, welches man wehrend der Laufzeit erweitern muss.

    Dazu habe ich im Designer bei der Deklaration des ContecstMenuItems bei = New .... einfach = MeineItemVariable eingefügt.

    Am anfang hat der Designer da immer gestreikt, habe da mehrere Varianten ausprobiert. Irgentwann hat es aber geklappt, obwohl ich nur = New .... einfach = MeineItemVariable verwendet habe, wie vorher auch. Ich denke das lag daran, dass ich immer ein 'Kopmmentar dahinter hatte, dann es aber entfernt habe und dan hat der Designer mitgespielt.

    Achtung: Im Designer fummelt sollte man nur bei Testprojekten. Wenn man sicht damit nicht auskennt, kann man das Projekt ganz schön versauen.