隐藏/显示子菜单按钮

该代码用于表单上的切换按钮布局,使用此代码,您可以将多个切换按钮设置为可见,并具有多个子菜单,这些子菜单在不使用时将保持隐藏状态。 我的主菜单是用此代码设置的,我将其设置为第一个按钮的方式是我的搜索切换按钮无子菜单(这防止在第一次打开表单时显示子菜单)TabIndex设置为0(我喜欢使用键盘)第二个切换按钮称为“表单”,表单切换按钮具有我要显示的表单的子菜单按钮。 TabIndex有时可能会使顺序井井有条,但很妙的是,在此窗体的“设计”视图中,您可以将按钮放置在所需的任何位置,并且它们在被调用时会自行定位。 我喜欢将标签索引结构化,搜索按钮将为0,表单按钮将为1,第一个子菜单按钮将为2,下一个子菜单= 3继续,直到所有子菜单按钮都有其索引,然后返回菜单下一个主按钮。

我将以下内容放在我保留的大多数表单代码模块中。 您可能需要将粗体语句重命名为TabIndex = 0控件


Option Compare Database
Option Explicit 
Public myDetVal As Integer
Public XVal As Integer
Public myX As Integer
Public myY As Integer 
Public Sub FocusYN(frm As Form, Optional strCtlName As String)
Dim ctl As Control
Dim GrpInt As Integer, i As Integer, cnt As Integer, myInt As Integer, inInt As Integer
Dim GrpNme() As Variant, GrpOrd() As Variant
Dim FndIt As Boolean
On Error GoTo FocusYNErr
If strCtlName <> "Detail" Then
    If frm(strCtlName).Tag <> "" Then
        GrpInt = Right(frm(strCtlName).Tag, 1)
        frm(strCtlName).Value = 1
    Else
        frm(strCtlName).Value = 0
    End If
    frm(strCtlName).SetFocus
    myDetVal = 0
Else
    frm!Search.SetFocus
End If 
ReDim Preserve GrpOrd(myInt)
For Each ctl In frm.Controls
    If ctl.ControlType = 122 Then 'also known as ControlType acToggleButton
        If strCtlName = "Detail" Then frm(ctl.Name).Value = 0
        If GrpInt = Right(frm(ctl.Name).Tag, 1) And Left(frm(ctl.Name).Tag, 1) <> "V" Then
            If ctl.Name <> strCtlName Then
                inInt = InStr(frm(ctl.Name).Tag, ";")
                If Left(frm(ctl.Name).Tag, inInt - 1) - 1 > myInt Then
                    myInt = Left(frm(ctl.Name).Tag, inInt - 1) - 1
                    ReDim Preserve GrpOrd(myInt)
                End If
                GrpOrd(Left(frm(ctl.Name).Tag, inInt - 1) - 1) = ctl.Name
            End If
        Else
            If ctl.Name <> strCtlName And frm(ctl.Name).Value <> 0 Then
                frm(ctl.Name).Value = 0
            End If
            If frm(ctl.Name).Tag <> "" And Not frm(ctl.Name).Tag Like "V*" Then
                frm(ctl.Name).Visible = False
            End If
        End If
    End If
Next 
For i = 0 To UBound(GrpOrd)
    Set ctl = frm(GrpOrd(i))
    If ctl.ControlType = 122 And strCtlName <> "DETAIL" Then 'also known as ControlType acToggleButton
     Select Case i
        Case 0
            ctl.Top = frm(strCtlName).Top
            ctl.Left = frm(strCtlName).Left + frm(strCtlName).Width
        Case 1 To 6
            ctl.Top = frm(GrpOrd(i - 1)).Top + frm(GrpOrd(i - 1)).Height
            ctl.Left = frm(strCtlName).Left + frm(strCtlName).Width
        Case 7
            ctl.Top = frm(strCtlName).Top
            ctl.Left = ((frm(strCtlName).Left + frm(strCtlName).Width) + frm(strCtlName).Width)
        Case 8 To 13
            ctl.Top = frm(GrpOrd(i - 1)).Top + frm(GrpOrd(i - 1)).Height
            ctl.Left = ((frm(strCtlName).Left + frm(strCtlName).Width) + frm(strCtlName).Width)
        Case 14
            ctl.Top = frm(strCtlName).Top
            ctl.Left = (((frm(strCtlName).Left + frm(strCtlName).Width) + frm(strCtlName).Width) + frm(strCtlName).Width)
        Case 15 To 20
            ctl.Top = frm(GrpOrd(i - 1)).Top + frm(GrpOrd(i - 1)).Height
            ctl.Left = (((frm(strCtlName).Left + frm(strCtlName).Width) + frm(strCtlName).Width) + frm(strCtlName).Width)
        Case Else
            MsgBox "Check your controls or your code there appears to be more buttons than 3 rows of 7 in each!"
    End Select
    frm(GrpOrd(i)).Visible = True
    End If
SkipIt:
Next
Set ctl = Nothing 
FocusYNExit:
Exit Sub
FocusYNErr:
If Err.Number = 2100 Then
    MsgBox "Your form is too small to show all of the buttons!"
    Exit Sub
ElseIf Err.Number <> 0 Then
    MsgBox Err.Number & "   " & Err.Description
End If
End Sub 

要有效显示和隐藏按钮,您需要在主按钮的标签属性中放置一个值,该值将控制按钮的显示或隐藏。 对于示例1,我的菜单表单上的主按钮称为“表单”,它具有标签属性= VGrp1(V始终可见,我也使用字母Grp来中继它属于哪个组)。 此“表单”按钮的子菜单按钮应具有标签属性,该属性应按您希望它们显示的顺序的数字开头,从顶部开始一直向下移动,然后向右并以半冒号分隔,它们应在编号中以1开头。您希望它们列出的顺序,例如“添加发票”按钮具有标签属性= 1; Grp1,下面的下一个按钮具有标签属性= 2; Grp1(同一组的按钮2)! 菜单下一个主按钮将带有VGpr2标签,子菜单按钮将带有1; Grp2,2; Grp2等标签。最多21个按钮,每行3行,共7行。

现在,对于表单模块中的其余代码:


Option Compare Database
Option Explicit 
Private Sub Form_Load()
myDetVal = 0
XVal = 1
myX = 1
Detail_MouseMove 1, 0, 1, 1
End Sub 
Private Sub Detail_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If myDetVal = 0 Then
    If XVal = 0 Then
        myX = X
        myY = Y
        XVal = 1
    Else
        If myY > 0 Then
            If myY - Y > 100 Or myY - Y < -100 Then
                FocusYN Me, "Detail"
                myDetVal = 1
            End If
        End If
        If myX > 0 Then
            If myX - X > 100 Or myX - X < -100 Then
                FocusYN Me, "Detail"
                myDetVal = 1
            End If
        End If
    End If
End If
End Sub
Private Sub Search_GotFocus()
    Detail_MouseMove 1, 0, 1, 1
End Sub 
Private Sub Search_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Detail_MouseMove 1, 0, 1, 1
End Sub
Private Sub Toggle1_GotFocus()
    If Me!Toggle1 = 0 Then
        FocusYN Me, "Toggle1"
    End If
End Sub 
Private Sub Toggle1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Me!Toggle1 = 0 Then
    Me!Toggle1.SetFocus
    FocusYN Me, "Toggle1"
End If
End Sub
Private Sub Toggle3_GotFocus()
    If Me!Toggle3 = 0 Then
        FocusYN Me, "Toggle3"
    End If
End Sub 
Private Sub Toggle3_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Me!Toggle3 = 0 Then
    Me!Toggle3.SetFocus
    FocusYN Me, "Toggle3"
End If
End Sub 

From: https://bytes.com/topic/access/insights/621840-hide-display-submenu-buttons

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值