2012-05-25 43 views
1

我創建了一個ToolStripMenuItem的實例,並希望將它作爲子菜單添加到我的表單上的兩個不同菜單(上下文菜單和菜單條)。我知道如何讓它工作,但我想知道爲什麼這不起作用。C#WinForms動態添加ToolStripMenuItem。爲什麼這不起作用?

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); 
     } 
    } 

我發現,如果我註釋掉DropDownItems.Add()語句之一,它工作正常,或者如果我創建兩個單獨的實例。它爲什麼這樣做?

回答

1

如果您瞭解ToolStripItemCollection.Add的實施情況,您會發現第二個電話existingMenuItem.DropDownItems.Add(addThis);existingToolStripMenuItem.DropDownItems中刪除addThis

所以學習如何使用反編譯器,如ILSpy是.NET開發的關鍵,

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

可能的解決方法是創建兩個單獨的實例,你發現了。如果您打算將兩個實例連接在一起,可以使用的ActionList,

http://www.lextm.com/2012/04/packaging-crads-actionlist-for-net-via-nuget/

+0

感謝ILSpy的建議。 – br4d