BlakeMcKenna
asked on
Adding ToolStripMenuItems dynamically 3 levels deep?
I am trying to dynamically create a menu structure for an Windows Application. The structure will have 3 levels. I know how to add levels 1 and 2 but not sure how to add level 3. Below is my code:
Once I get that done, how to I create a Click_Event for each menuItem?
For Each row As DataRow In EH.DataTable.Rows
If Not IsDBNull(row(2)) Then
strFunction = row(1)
iMenuLevel = row(2)
strParent = row(3)
'row(0) f_ID
'row(1) functionality
'row(2) menuLevel
'row(3) parent
Select Case iMenuLevel
Case 1
mnu.Items.Add(strFunction)
mnu.Items(x).Tag = row(0)
Case 2
For Each subItm As ToolStripMenuItem In mnu.Items
If subItm.Tag = strParent Then
subItm.DropDownItems.Add(strFunction)
subItm.DropDownItems.Add("-")
End If
Next
Case 3
For Each sub3Item As ToolStripDropDownItem In mnu.Items
If sub3Item.Tag = strParent Then
sub3Item.DropDownItems.Add(strFunction)
sub3Item.DropDownItems.Add("-")
End If
Next
End Select
End If
Next
Once I get that done, how to I create a Click_Event for each menuItem?
You'll need that have some sub already defined in your app.
for example:
Private sub Item1_Click()
'do something
End Sub
Then after you create the menu:
AddHandler subitem.Click, AddressOf Item1_Click
as far as adding sub menus
just dim them in advance
case 3
dim mainmenu as menustrip 'create control
dim menuitem as toolstripmenuitem ' this is what shows on the title bar
dim subitem as toolstripmenuitem ' 1st level
dim subitem1 as toolstripmenuitem ' 2nd level
dim subitem1 as toolstripmenuitem ' 3rd level
mainmenu.Items.Add(menuite m)
menuitem.Text = "Main Menu"
Me.Controls.Add(mainmenu)
For Each item As ToolStripMenuItem In mainmenu.Items
mitem.DropDownItems.Add(su bitem)
subitem.Text = "Sub-menu"
Next
For Each item As ToolStripMenuItem In mainmenu.Items
subitem.DropDownItems.Add( subsubitem )
subsubitem.Text = "Sub-Sub-menu"
Next
For Each item As ToolStripMenuItem In mainmenu.Items
subsubitem.DropDownItems.A dd(subsubs ubitem)
subsubsubitem.Text = "Sub-Sub-Sub-menu"
Next
this adds one sub menu to each menu. you can adjust the logic from here to add more fer level
for example:
Private sub Item1_Click()
'do something
End Sub
Then after you create the menu:
AddHandler subitem.Click, AddressOf Item1_Click
as far as adding sub menus
just dim them in advance
case 3
dim mainmenu as menustrip 'create control
dim menuitem as toolstripmenuitem ' this is what shows on the title bar
dim subitem as toolstripmenuitem ' 1st level
dim subitem1 as toolstripmenuitem ' 2nd level
dim subitem1 as toolstripmenuitem ' 3rd level
mainmenu.Items.Add(menuite
menuitem.Text = "Main Menu"
Me.Controls.Add(mainmenu)
For Each item As ToolStripMenuItem In mainmenu.Items
mitem.DropDownItems.Add(su
subitem.Text = "Sub-menu"
Next
For Each item As ToolStripMenuItem In mainmenu.Items
subitem.DropDownItems.Add(
subsubitem.Text = "Sub-Sub-menu"
Next
For Each item As ToolStripMenuItem In mainmenu.Items
subsubitem.DropDownItems.A
subsubsubitem.Text = "Sub-Sub-Sub-menu"
Next
this adds one sub menu to each menu. you can adjust the logic from here to add more fer level
Oops, the second 'dim subitem1' should be 'dim subitem2'
ASKER
Your code doesn't work. It only works up to the 2nd level. The 3rd Level isn't working.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Actually you don't have to do the for each loop
once you define all the toolstripmenus you just need to add them to which ever menu you want
for example:
to add a submenu to menuitem
menuitem.dropdownitems.add (subitem2)
this will put "Sub-Sub--Submenu" under main menu
once you define all the toolstripmenus you just need to add them to which ever menu you want
for example:
to add a submenu to menuitem
menuitem.dropdownitems.add
this will put "Sub-Sub--Submenu" under main menu
ASKER
For my case, I do need the For Each loop because I'm creating this Menu structure based on Database values. So the menu is built dynamically. I still can't get it to work but I think it has to do with my database design possibly.
since the code you gave us initially doesn't give us all the facts, we need more info.
when do you create mnu? When is 'x' declared, what is the value of 'x'. What would the actual values of row(1-3) be, for example?
when do you create mnu? When is 'x' declared, what is the value of 'x'. What would the actual values of row(1-3) be, for example?
ASKER
I finally got your code working...
ASKER