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