Autohotkey 中文论坛

完整版: menu添加子菜单的两种方式及差异
你目前正在浏览的是简化版. 请点击这里浏览完整版
如图有两种添加子菜单的方式,
但方式2会多出了分隔线,用什么方式删除呢?
方式2的流程在读取配置生成菜单时更易用。
代码:
#SingleInstance Force
;添加两个项目,并设置A,B为热键
Menu, MyMenu, Add, Item1(&A), MenuHandler
Menu, MyMenu, Add, Item2(&B), MenuHandler

;方式1:子菜单把项目全添加后再添加到主菜单
;添加项目到子菜单MySubmenu1,格式和上面一样
;Menu, MySubmenu1, Add, Item3, MenuHandler
;Menu, MySubmenu1, Add, Item4, MenuHandler

;Menu, MyMenu, Add, My Submenu, :MySubmenu1

;方式2:先添加子菜单到主菜单,再给子菜单添加项目
Menu, MySubmenu1, Add ;比上个方法要多写这一句,副作用是子菜单第一项都有分隔符
Menu, MyMenu, Add, My Submenu, :MySubmenu1

Menu, MySubmenu1, Add, Item3, MenuHandler
Menu, MySubmenu1, Add, Item4, MenuHandler
Return

MenuHandler:
MsgBox You selected %A_ThisMenuItem% from the Menu %A_ThisMenu%.
Return

#k::Menu, MyMenu, Show
Menu, MySubmenu1, Add添加了个分隔符。
当前不支持仅删除分隔符。
可以先任意添加一项(非分隔符),再删除它?
代码:
Menu, MySubmenu1, Add,newSub,MenuHandler
..
Menu, MySubmenu1, delete,newSub
(2017-02-08 15 : 24)robertL 提到: [ -> ]Menu, MySubmenu1, Add添加了个分隔符。

是啊,但是没有这句又不能添加到主菜单,看来还是有点缺陷~
代码:
#SingleInstance Force
;添加两个项目,并设置A,B为热键
Menu, MyMenu, Add, Item1(&A), MenuHandler
Menu, MyMenu, Add, Item2(&B), MenuHandler

;方式1:子菜单把项目全添加后再添加到主菜单
;添加项目到子菜单MySubmenu1,格式和上面一样
;Menu, MySubmenu1, Add, Item3, MenuHandler
;Menu, MySubmenu1, Add, Item4, MenuHandler
;Menu, MyMenu, Add, My Submenu, :MySubmenu1

;方式2:先添加子菜单到主菜单,再给子菜单添加项目
Menu, MySubmenu1, Add ;比上个方法要多写这一句,副作用是此命令还给子菜单添加了分隔符
Menu, MySubmenu1, DeleteAll ;所以要增加这一条来删除分隔符 NOTE
Menu, MyMenu, Add, My Submenu, :MySubmenu1
Menu, MySubmenu1, Add, Item3, MenuHandler
Menu, MySubmenu1, Add, Item4, MenuHandler
Return

MenuHandler:
MsgBox You selected %A_ThisMenuItem% from the Menu %A_ThisMenu%.
Return

#k::Menu, MyMenu, Show
[/code]
这个问题我也拖了很久,之前觉得解决很麻烦,不过后来解决起来意外的简单。
我先用了一种笨方法:添加一个不会重复的子菜单项,添加子菜单后再删除
代码:
Menu, MySubmenu1, Add,% Chr(3),临时使用
Menu, MyMenu, Add, My Submenu, :MySubmenu1
Menu, MySubmenu1, Delete,% Chr(3)

后来才发现AHK支持删除分割线:一样先添加,然后再删除,这样有子菜单同时不会有分割线

代码:
Menu, MySubmenu1, Add
Menu, MyMenu, Add, My Submenu, :MySubmenu1
Menu, MySubmenu1, Delete,1&
参考网址