MS Access - контекстное меню - получить корневой контроль - PullRequest
0 голосов
/ 28 мая 2018

У меня есть форма, в которой пользователь может просматривать различные документы, связанные со счетом (PO, счет-фактура, инструкции по транспортировке ...).Для упрощения я назову их документом № 1, документом № 2, документом № 3.Каждый документ сохраняется в определенном каталоге.

В форме счета есть 3 кнопки (button_doc1, button_doc2, button_doc # 3)

Я хочу следующее поведение:

  • при щелчке левой кнопкой мыши пользователь может предварительно просмотреть документ (отчет открывается при событии щелчка правой кнопкой мыши)
  • при щелчке правой кнопкой мыши открывается контекстное меню, в котором предлагается открыть каталог, содержащий документ.

Поэтому я пытаюсь с контекстным меню, определенным следующим образом:

Sub CreateFormShortcutMenu_OpenReportDir()
   Dim cmbRightClick As Office.CommandBar
   Dim cmbControl As Office.CommandBarControl

   ' Create the shortcut menu.

   Set cmbRightClick = CommandBars.Add("cmdShortCutMenu_FormOpenReportDir", msoBarPopup, False, True)

   With cmbRightClick
            ' Add the DeleteRecord command.
            Set cmbControl = .Controls.Add(msoControlButton, , , , True)
       With cmbControl
          .BeginGroup = True
          .Caption = "Open dir"
          .OnAction = "=CallbackOpenDocDir()"
          .FaceId = 106
      End With

   End With

   Set cmbControl = Nothing
   Set cmbRightClick = Nothing

   End Sub

Интересно, возможно ли использовать одно и то же контекстное меню на 3 кнопках (чтобы избежать избыточного кода)Как я могу получить кнопку (имя или ссылка), которая вызвала обратный вызов.

Public Function CallbackOpenDocDir()
  dim strDocName as string 

  'code to get the button / doc name

  select case strDocName
      case "Doc#1"
          openFileExplorer doc1Dir
      case "Doc#2"
          openFileExplorer doc2Dir
      case "Doc#3"
          openFileExplorer doc3Dir
  end select

End Function

Спасибо за ваши идеи.

1 Ответ

0 голосов
/ 29 мая 2018

Вы можете использовать код этой формы, чтобы определить имя нажатой кнопки:

Me.ActiveControl.Name

или позвонить из любого места

Screen.ActiveControl.Name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...