当鼠标悬停在VBA用户窗体上时,边栏将展开



我正在尝试制作一个侧边栏,当鼠标悬停在它上面时,它会展开/显示。我正在使用一个框架作为侧边栏。

在扩展之前侧边栏应该是什么样子

扩展后侧边栏应该如何查看

我的潜艇:

Sub sidebar_showhide()
If Me.SideBar.Width = 60 Then
Me.SideBar.Width = 160
Me.LLC_SideBar.Width = 160
Me.Image3.Width = 150
''Me.Image3.Picture = LoadPicture("...")
Exit Sub
Else
Me.SideBar.Width = 60
Me.LLC_SideBar.Width = 60
Me.Image3.Width = 50
''Me.Image3.Picture = LoadPicture("...")
Exit Sub
End If
End Sub

当用MouseUp事件调用时,这很好,但是否可以用MouseMove事件对其进行编码,而不需要选择语句无休止地循环,因为即使用户在窗体内悬停,子控件也会被触发。我试图想出一个函数来检测鼠标何时移出窗体,但无法破解它。

感谢您的帮助。

尝试以下操作-不涉及鼠标按钮。在侧边栏被输入的那一刻,它会放大,在离开的那一瞬间,它会缩小。

Const showWidth = 120
Const hideWidth = 60
Private Sub Sidebar_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
showBar
End Sub
Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
HideBar
End Sub
Private Sub showBar()
If Sidebar.Width < 120 Then Sidebar.Width = showWidth
End Sub
Private Sub HideBar()
If Sidebar.Width > 60 Then Sidebar.Width = hideWidth
End Sub

但是,您需要注意的是,放大的侧边栏部分隐藏了表单其余部分的控件。当用户将鼠标移出侧边栏并直接移动到该控件中时,不会触发UserForm_MouseMove-事件。在这种情况下,您将不得不为这些控件(也称为HideBar(添加MouseMove事件处理程序

也可能是侧边栏上的控件在侧边栏未放大时部分隐藏。该使用可以将鼠标直接移动到该控件,并且侧边栏的MouseMove事件不会触发:为这些控件(也称为ShowBar(添加MouseMove event处理程序

最新更新