访问表单和报表支持OnMenu
属性,该属性遵循其他表单/报表事件属性(如OnLoad
)的命名约定和行为(其中OnLoad
属性的值为{ {1}}会导致[Event Procedure]
事件由带有签名Load
的代码隐藏处理。)
但是,虽然在对象浏览器和表单/报表属性对话框中可以轻松识别Private Sub Report_Load()
事件及其Load
属性,但OnLoad
的情况并非如此。对象浏览器中的OnMenu
属性是,但似乎在属性对话框中为"菜单栏",并且OnMenu
事件无处可见。但是,如果我将公共函数的名称分配给Menu
属性,则在打开报告时调用该函数:
OnMenu
但我也看到有一个Report_Report1.OnMenu = "=MyOnMenuCallback()"
属性,它似乎具有我分配给MenuBar
的相同的值....
编辑:似乎还有一个OnMenu
属性可以触发事件,但该事件在对象浏览器中不可见,并且似乎不是ShortcutMenuBar
属性?
这个OnShortcutMenu
事件的定义在哪里?除了Menu
属性之外,我无法在对象浏览器中找到任何内容。是否为真实的事件,我可以编写一个事件处理程序(如果我为OnMenu
属性赋值OnMenu
?
答案 0 :(得分:1)
OnMenu
属性在Access 2.0及更高版本中基本上已弃用,并且仅在对象浏览器中显示,以便向后兼容Access 1.x.它从来不是一个事件,它是一个属性。在Microsoft Access 1.x中,您创建了特殊的宏来定义自定义下拉菜单和菜单项,然后将OnMenu
属性设置为该宏名称。在Access 2.0到Access 2003中,您可以创建相同类型的自定义菜单宏,也可以使用GUI创建菜单栏或工具栏,并将它们分配给MenuBar
属性。在Access 2007及更高版本中,在应用程序中提供自定义菜单或工具栏的正确方法是使用Ribbon XML创建custom Ribbons并放入USysRibbons表。
许多版本的Access的在线文档对于OnMenu
条目具有误导性和错误。例如,看一下这个MSDN entry,它会让你相信OnMenu是一个Form或Report事件,但它不是,并且该文档中缺少的一条信息就是“如何”触发事件,因为它不是事件。点击那里的链接获取一些实际的Form事件,你会发现它们几乎是同一类型的条目,但它们包括关键的声明:
XXX事件发生在......
OnMenu
的文档完全错误(遗憾的是,与Microsoft文档的太多内容一样)。
将OnMenu
视为在Access 2.0及更高版本中重命名为MenuBar
,这就是为什么如果在代码中设置它,它会出现在GUI属性对话框的MenuBar
条目中