Brad C
Brad C

Reputation: 2982

C# WinForms Adding ToolStripMenuItem dynamically. Why does this not work?

I have created an instance of a ToolStripMenuItem and wanted to add it as a submenu to two different menus on my form (to a contextmenu and a menu strip). I know how to get it to work but I am wondering why this doesn't work.

    private static string[] parameters = { "itemOne", "itemTwo", "itemThree"};

    private void MainForm_Load(object sender, EventArgs e)
    {
        foreach (string s in parameters)
        {
            ToolStripMenuItem addThis = new ToolStripMenuItem(s);
            existingToolStripMenuItem.DropDownItems.Add(addThis);
            existingMenuItem.DropDownItems.Add(addThis);
        }
    }

I noticed it works fine if I comment out one of the DropDownItems.Add() statements or if I create two separate instances. Why does it do this?

Upvotes: 1

Views: 1261

Answers (1)

Lex Li
Lex Li

Reputation: 63123

If you learn about the implementation of ToolStripItemCollection.Add, you will find that the second call existingMenuItem.DropDownItems.Add(addThis); removes addThis from existingToolStripMenuItem.DropDownItems.

So learning how to use decompilers such as ILSpy is critical for .NET developers,

http://wiki.sharpdevelop.net/ilspy.ashx

A possible workaround is to create two separate instances as you found out. If you intend to connect the two instances together, you can use ActionList for .NET.

Upvotes: 1

Related Questions