右键点击时选中MS-Access Continuous Forms对应记录的方法问询
解决Access连续窗体右键菜单对应错误记录的问题
在Access的DetailedCalendar连续窗体中,右键点击某条记录时,自定义上下文菜单获取的是右键点击前选中记录的ID,而非点击的目标记录。需求是实现右键点击时先选中对应记录,再显示快捷菜单。
实现步骤
- 禁用窗体默认快捷菜单:避免默认菜单在记录选中前触发。
- 通过
MouseUp事件处理右键点击:利用坐标定位目标记录,设置为当前记录后再显示自定义菜单。
修正后的完整代码
1. 自定义菜单加载函数(修正变量错误)
Function LoadApplicationCommandBars() As Long Dim lngReturn As Long Dim MenuChoice As String Dim cbrNewMenu As CommandBar Dim mnuItem As CommandBarButton MenuChoice = "CalendarDetailContextMenu" On Error Resume Next ' 删除已存在的同名菜单 Application.CommandBars(MenuChoice).Delete On Error GoTo Routine_Err ' 创建弹出式快捷菜单 Set cbrNewMenu = Application.CommandBars.Add(MenuChoice, msoBarPopup) Set mnuItem = cbrNewMenu.Controls.Add(msoControlButton) With mnuItem .Style = msoButtonIconAndCaption .Caption = "Edit Row" .OnAction = "=EditRow()" .FaceId = 488 End With lngReturn = 0 Routine_End: LoadApplicationCommandBars = lngReturn Exit Function Routine_Err: lngReturn = Err.Number Resume Routine_End End Function
2. 菜单点击事件函数(确保获取当前记录ID)
Public Function EditRow() ' 仅处理已存在的记录,排除新记录 If Not Me.NewRecord Then MsgBox "LineID=" & Me![ID] DoCmd.OpenForm "EditActivities", acNormal, "", "[ID]=" & Me![ID] End If End Function
3. 窗体加载事件(初始化菜单并禁用默认快捷菜单)
Private Sub Form_Load() LoadApplicationCommandBars ' 确保自定义菜单已加载 Me.ShortcutMenu = False ' 禁用窗体默认快捷菜单 End Sub
4. 窗体鼠标抬起事件(处理右键选中记录并显示菜单)
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim lngSection As Long Dim lngRow As Long ' 仅响应右键点击 If Button = acRightButton Then ' 通过坐标获取点击的区域和行号 Me.HitTest X, Y, lngSection, lngRow ' 确认点击的是数据明细行(非页眉/页脚) If lngSection = acDetail And lngRow > -1 Then ' 定位到目标记录(用Bookmark更可靠,不受过滤/排序影响) Me.Recordset.Move lngRow Me.Bookmark = Me.Recordset.Bookmark ' 显示自定义快捷菜单 Application.CommandBars("CalendarDetailContextMenu").ShowPopup End If End If End Sub
关键说明
HitTest方法:通过鼠标点击的X/Y坐标,确定点击的是窗体的哪个区域(明细行、页眉、页脚)以及对应的行号。Bookmark定位:相比AbsolutePosition,Bookmark不受记录过滤、排序的影响,能更精准地定位到目标记录。- 禁用默认菜单:避免系统默认菜单在记录选中前触发,导致获取错误的记录ID。
内容的提问来源于stack exchange,提问作者Dominic Vella
相关产品推荐
相关产品推荐

