See full discussion:
http://www.codeproject.com/script/Forums/Edit.aspx?fid=1823902&select=4478789&floc=/Articles/512956/NET-Shell-Extensions-Shell-Context-Menus&action=r
Essentially, nesting context menu items can make the indexes go out of whack.
Hello
First of all, thanks for this great code. I needed to use your code since windows 8 does not support multilevel item in SendTo which was supported in Windows XP, but I had a problem in certain situation. When using your code, I needed to add a subitem before adding the actual menu items in order to obtain a tree like structure. What I mean was a structure like this:
Context Menu->
______________SubMenu->
_______________________Run Menu 1 Job
_______________________Run Menu 2 Job
What happens is when I click the first item of 'SubMenu' that is 'Run Menu 1 Job', it does not trigger the event attached to 'Run Menu 1 Job' (itemCountLinesv1), but it triggers the event of the second item that is the event of 'Run Menu 2 Job' (itemCountLinesv2). And when I click the second item of 'SubMenu' that is 'Run Menu 2 Job', it does not trigger its event (itemCountLinesv2). I tried this with up to six items under SubMenu, the pattern does not change, always triggers the next one's event except the last item wich does not trigger anything. I could not resolve this, would you be able to help me (For testing, I used both VS2008,.NET4.0 SP1 in 32 bit XP and VS2012 with first update,.NET4.5 in 64 bit Windows8; no difference).
Kind Regards
Ozcan
// Create the menu strip.
protected override ContextMenuStrip CreateMenu()
{
// Create the menu strip.
var menu = new ContextMenuStrip();
ToolStripMenuItem SubMenu;
SubMenu = new ToolStripMenuItem("SubMenu");
menu.Items.Add(SubMenu);
var itemCountLinesv1 = new ToolStripMenuItem
{
Text = "Run Menu 1 Job",
};
itemCountLinesv1.Click += SubMenuItemClickv1;
SubMenu.DropDownItems.Add(itemCountLinesv1);
var itemCountLinesv2 = new ToolStripMenuItem
{
Text = "Run Menu 2 Job",
};
itemCountLinesv2.Click += SubMenuItemClickv2;
SubMenu.DropDownItems.Add(itemCountLinesv2);
return menu;
}