Office中国论坛/Access中国论坛

标题: 右键调用系统菜单小技巧 [打印本页]

作者: roych    时间: 2016-9-30 14:22
标题: 右键调用系统菜单小技巧
        前几天,我们群里几个大神在聊如何右键调用系统菜单。
        红尘【对,就是那个已经消失很久了的大神“红尘如烟”】说,希望可以通过右键调用一些系统菜单,例如,自动筛选之类。
        我的第一反应是,用shortcut属性。不过红尘早就试过了。如果使用shortcut,那么这个菜单应该是全局菜单。也就是说,所有窗体都会有这个菜单。
        既然shortcut不行,那ribbon怎么样?通过ribbon在单独的窗体使用?不过也被否决了,因为这个跟ribbon没有半毛钱关系,菜单在工具栏里,属于commanbars属性。
       这也不行那也不行,我干脆闭嘴好了。等站长说话。王站说,这个嘛(这时候,我估计他是下意识地往下巴捻了一下,然后发现没有美髯),只能在2003版本设置好了再升级到新版本了。

      事情本来到此为止了。不过不知道怎么今天突然想起这件事,便去钻牛角尖了。
      先用宏创建菜单,再从属性里调用快捷菜单,不过失败了。因为在原先的当前数据库里禁用系统菜单之后(见附图),就失效了。
[attach]60037[/attach]
        既然这个行不通,那只能选择在控件上处理了。一看,单击事件、双击事件…右击事件?对不起,好像没有这个事件。不管了,先试试双击事件吧。
        为了测试效果,我先在加载事件中禁止筛选,这样的话,单击就没法弹出筛选的快捷菜单了。然后在双击事件中允许筛选,并调用系统的筛选菜单。结果?当然是……成功啦。小伙伴们,一起欢呼吧!
  1. Private Sub Form_Load()
  2.     Me.Form.AllowFilters = False
  3. End Sub

  4. Private Sub 部门_DblClick(Cancel As Integer)
  5.     Me.Form.AllowFilters = True
  6.     DoCmd.RunCommand acCmdFilterMenu
  7. End Sub

  8. Private Sub 部门ID_DblClick(Cancel As Integer)
  9.     Me.Form.AllowFilters = True
  10.     DoCmd.RunCommand acCmdFilterMenu
  11. End Sub
复制代码
      不过双击总是麻烦一点的。我们不妨从另一个角度来“技术处理”下,看看能不能代替“右击事件”。——泥萌肯定猜对了,是的,那就是鼠标释放事件(事实上,使用按下事件也是可以的,不过我喜欢用释放事件)。代码跟前面差不多,就不贴啦。详细看附件吧。
[attach]60038[/attach]

[attach]60039[/attach]
PS:这个版本的2003格式如果不能用(我这里是另存为2000版本的,不知道宏名称会不会相应改过来),麻烦将里面的SubMacro改为AddMenu再试试(如果再不行,估计只能通过“用宏生成菜单”来处理了)。
针对红尘的问题,试了下用宏生成菜单,不过似乎不是那么好使,大家可以继续测试。
[attach]60040[/attach]


作者: tmtony    时间: 2016-9-30 14:25
好方法,赞一个!
作者: 红尘如烟    时间: 2016-9-30 15:05
感谢Roy!让我们又学到一招,我确实还不知道acCmdFilterMenu这个菜单命令。
我其实想要实现的是把筛选菜单和自定义菜单结合,即在右键菜单上,即有筛选菜单,又有自定义的菜单。





欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3