MS Access - контекстное меню - получить корневой контроль

У меня есть форма, где пользователь может просматривать различные документы, связанные со счетом (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 ответ

Решение

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

Me.ActiveControl.Name

или позвоните откуда угодно

Screen.ActiveControl.Name
Другие вопросы по тегам