C# 添加和删除ToolStripMenuItem';WinForms中MenuStrip和DropDownItems中的
我有一些带有静态项的C# 添加和删除ToolStripMenuItem';WinForms中MenuStrip和DropDownItems中的,c#,winforms,menuitem,C#,Winforms,Menuitem,我有一些带有静态项的MenuStrip。我正在以编程方式向该菜单添加项。其中一些项具有子项(DropDownItems) 在某些时候,我想删除所有添加的项目,以重新创建具有不同项目的菜单。如何做对 示例情况: mainMenu -staticItem1 -added1 -added1_sub1 -added1_sub2 -added2 -added2_sub1 我可以做到: added1.Dispose(); mainMenu.Items.Remove(added2); 这
MenuStrip
。我正在以编程方式向该菜单添加项。其中一些项具有子项(DropDownItems
)
在某些时候,我想删除所有添加的项目,以重新创建具有不同项目的菜单。如何做对
示例情况:
mainMenu
-staticItem1
-added1
-added1_sub1
-added1_sub2
-added2
-added2_sub1
我可以做到:
added1.Dispose();
mainMenu.Items.Remove(added2);
这两种方法都有效,但我不确定是否安全。也许我应该一个一个递归地删除和处理所有项目和子项目?- 仅使用
方法,就足够了Remove
- 您不需要递归,当您删除父对象时,它的所有子对象都将被删除
- 使用
删除菜单和菜单的所有子项Items.Clear()
删除项目的所有子项DropDownItems.Clear()
移除
处理项目。我看到,处理一个项目将删除附加的事件,例如在项目单击时,因此该项目可以由GC收集。在对该集合调用Remove
后,GC是否会收集该项?是的,在您的情况下,您不需要调用Dispose,当GC觉得方便时,该项将从内存中删除。确定,但我仍然想知道单击事件。我想我应该取消订阅这个活动,因为GC不会收集它。我说的对吗?不,您不需要取消订阅事件处理程序,因为此引用只是一种方式。因此,与事件处理程序相关的任何内容都不会停止GC。看起来您仍然担心,请检查read,阅读Dispose方法