【发布时间】:2015-02-26 05:49:32
【问题描述】:
首先,是的,我浏览了整个网络,但似乎仍然无法破坏动态创建的菜单项。使用德尔福 XE。我因此创建了项目(为了练习 SubMenuName 的目的是'Test1':
MenuItemCreated := TMenuItem.Create(PopupMenu1);
MenuItemCreated.Caption:= SubMenuCaption
MenuItemCreated.Hint := SubMenuHint;
MenuItemCreated.Name := SubMenuName;
MenuItemCreated.OnClick := SubMenuClick;
MenuItemCreated.AutoHotkeys := maManual;
MySubMenu.Add(MenuItemCreated);
使用创建的子菜单没有问题。 SubMenuClick 过程正常工作,并且我确定了正确的 subMenu 项目,因此那里没有问题。然后我要做的是一个应用程序注销,它应该使用此代码释放动态创建的子菜单(尽管我尝试了很多变体):
// Get rid of the menu items created
While MySubMenu.Count > 0 do
begin
Itemtodelete := MySubMenu.Items[0];
FreeandNil(ItemtoDelete);
end;
我已经放入了 showmessage() 调试行,显示菜单项的组件名称是 freeandnil'd 并且它们是我所期望的,即。 'Test1' 和我创建的任何其他人。然后我重新登录到我的应用程序(它仍在运行,但我已注销)。然后,该软件会尝试重新创建具有相同名称的相同子菜单(因为就我的应用程序而言,没有任何改变,并且它们之前已被处理(假设))。我立即提出了异常:
错误:名为 Test1 的组件已存在
我完全不知道如何处理子菜单项,以便以后可以使用相同的名称重新创建它们。
非常感谢任何帮助。
谢谢, 知识库
【问题讨论】: