首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Access中创建ShortCut (RightClick)菜单

在Access中创建ShortCut (RightClick)菜单
EN

Code Review用户
提问于 2014-07-24 18:18:38
回答 1查看 5.4K关注 0票数 12

我正在编写一个工具,用于为在Access运行时上构建的应用程序创建快捷菜单。我把这个应用程序编译成一个*.accde文件,令我懊恼的是,右击菜单被禁用了。

经过一些研究,我已经能够开发这个工具来添加菜单到数据库。此代码在开发期间调用,而不是在运行时调用。

我已经看到很多重复,我不知道该怎么办。所以,我想在我开始构建所有我需要的菜单之前,我应该停下来,得到一些反馈。

注意:没有一个内置的枚举所有不同的按钮类型。有成千上万的它们,我把它们添加到一个自我定义的枚举中,因为我需要它们。

代码语言:javascript
复制
Option Explicit

Private Enum ButtonControls
    bcCopy = 19
    bcCut = 21
    bcPaste = 22
    bcSortSmallToLarge = 210
    bcSortSortLargeToSmall = 211
    bcDelete = 478
    bcNewRecord = 539
    bcRowHeight = 541
    bcDeleteRecord = 644
End Enum

Private Sub CreateFormDatasheetClipboard()
    Dim menu As Office.CommandBar
    Set menu = CommandBars.Add("FrmDsClipboard", msoBarPopup, False)

    With menu.Controls
        .Add msoControlButton, bcCut
        .Add msoControlButton, bcCopy
        .Add msoControlButton, bcPaste
    End With
    Set menu = Nothing
End Sub

Private Sub CreateFormDataSheetCopyOnly()
    Dim menu As Office.CommandBar
    Set menu = CommandBars.Add("FrmDsCopyOnly", msoBarPopup, False)

    menu.Controls.Add msoControlButton, bcCopy

    Set menu = Nothing
End Sub


Private Sub CreateFormDataSheetRow()
    Dim menu As Office.CommandBar
    Set menu = CommandBars.Add("FrmDsRow", msoBarPopup, False)

    With menu.Controls
        .Add msoControlButton, bcNewRecord
        .Add msoControlButton, bcDeleteRecord
        .Add msoControlButton, bcCut
        .Add msoControlButton, bcCopy
        .Add msoControlButton, bcPaste
        .Add msoControlButton, bcRowHeight
    End With

    Set menu = Nothing
End Sub

Private Sub CreateFormDataSheetRowClipboardOnly()
    Dim menu As Office.CommandBar
    Set menu = CommandBars.Add("FrmDsRowClipboardOnly", msoBarPopup, False)

    With menu.Controls
        .Add msoControlButton, bcCut
        .Add msoControlButton, bcCopy
        .Add msoControlButton, bcPaste
    End With

    Set menu = Nothing
End Sub

Private Sub RemoveAllCustomMenus()
    Dim cbar As CommandBar
    For Each cbar In CommandBars
        If Not cbar.BuiltIn Then
            cbar.Delete
        End If
    Next
End Sub

Private Sub CreateAllCustomMenus()
    RemoveAllCustomMenus
    CreateFormDatasheetClipboard
    CreateFormDataSheetCopyOnly
    CreateFormDataSheetRow
    CreateFormDataSheetRowClipboardOnly
End Sub
EN

回答 1

Code Review用户

回答已采纳

发布于 2014-07-24 20:29:40

正如您已经注意到的,所有CreateSomething方法都有相同的重复模式。我们可以提取这个模式并将其封装在一个重用的方法中:

代码语言:javascript
复制
Private Sub CreateCommandBar(name As String, ParamArray buttonIDs() As Variant)
    Dim menu As Office.CommandBar
    Set menu = CommandBars.Add(name, msoBarPopup, False)

    For Each ID In buttonIDs
        menu.Controls.Add msoControlButton, i
    Next

    Set menu = Nothing
End Sub

而且,CreateFormDataSheetRowClipboardOnly可以写成:

代码语言:javascript
复制
Private Sub CreateFormDataSheetRowClipboardOnly()
    CreateCommandBar "asd", bcCut, bcCopy, bcPaste
End Sub
票数 5
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/57948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档