Vb.net 隐藏其中组件的滑块面板

Vb.net 隐藏其中组件的滑块面板,vb.net,panel,Vb.net,Panel,我将使用什么事件来处理隐藏此面板内的按钮/组件?这是一个滑动面板,当用户悬停在上面时,它会展开,当鼠标退出时,它会折叠 问题是我不知道如何防止组件显示,直到它被扩展 Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Panel1.Dock = DockStyle.Left Timer3.Enabled = Tru

我将使用什么事件来处理隐藏此面板内的按钮/组件?这是一个滑动面板,当用户悬停在上面时,它会展开,当鼠标退出时,它会折叠

问题是我不知道如何防止组件显示,直到它被扩展

 Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Panel1.Dock = DockStyle.Left
        Timer3.Enabled = True
    End Sub


    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        If Panel1.Width < 150 Then
            Panel1.Width = Panel1.Width + 100
        ElseIf Panel1.Width = 150 Then
            Timer1.Enabled = False
        End If
    End Sub

    Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
        If Panel1.Width >= 100 Then
            Panel1.Width = Panel1.Width - 50
            If Panel1.Width < 100 And Panel1.Width > 25 Then
                Panel1.Width = Panel1.Width - 1
            End If

        ElseIf Panel1.Width = 25 Then
            Timer2.Enabled = False
        End If
    End Sub


    Private Sub Timer3_Tick(sender As Object, e As EventArgs) Handles Timer3.Tick
        If Panel1.ClientRectangle.Contains(Panel1.PointToClient(MousePosition)) Then
            If Not Timer1.Enabled AndAlso Panel1.Width < 150 Then
                Timer1.Enabled = True
                Timer2.Enabled = False
            End If
        Else
            If Not Timer2.Enabled AndAlso Panel1.Width > 25 Then
                Timer1.Enabled = False
                Timer2.Enabled = True
            End If
        End If
    End Sub


End Class
公共类表单1
私有子表单1_Load(发送方作为对象,e作为事件参数)处理MyBase.Load
面板1.Dock=DockStyle.左
Timer3.Enabled=True
端接头
私有子Timer1\u Tick(发送方作为对象,e作为事件参数)处理Timer1.Tick
如果面板1.宽度小于150,则
面板1.宽度=面板1.宽度+100
ElseIf Panel1.宽度=150
Timer1.Enabled=False
如果结束
端接头
私有子Timer2_Tick(发送方作为对象,e作为事件参数)处理Timer2。Tick
如果面板1.宽度>=100,则
面板1.宽度=面板1.宽度-50
如果面板1.宽度<100且面板1.宽度>25,则
面板1.宽度=面板1.宽度-1
如果结束
ElseIf Panel1.宽度=25
Timer2.Enabled=False
如果结束
端接头
私有子Timer3_Tick(发送方作为对象,e作为事件参数)处理Timer3.Tick
如果Panel1.ClientRectangle.Contains(Panel1.PointToClient(MousePosition))则
如果未启用计时器1,且面板1宽度小于150,则
Timer1.Enabled=True
Timer2.Enabled=False
如果结束
其他的
如果未启用计时器2,并且面板1.宽度>25,则
Timer1.Enabled=False
Timer2.Enabled=True
如果结束
如果结束
端接头
末级

您可能应该重新命名计时器以保持其笔直,例如SlidePointer和SlideCloseTimer等,这样可以更容易理解计时器的用途

我重新处理了计时器事件,以便在关闭计时器启动时隐藏列表框,并在面板达到最大宽度时显示列表框:

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
  If Panel1.Width < 100 Then
    Panel1.Width += 50
  ElseIf Panel1.Width < 150 Then
    Panel1.Width += 25
  ElseIf Panel1.Width >= 150 Then
    Timer1.Enabled = False
    ListBox1.Visible = True
  End If
End Sub

Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
  If ListBox1.Visible Then
    ListBox1.Visible = False
  End If
  If Panel1.Width > 100 Then
    Panel1.Width -= 50
  ElseIf Panel1.Width > 25 Then
    Panel1.Width -= 25
  ElseIf Panel1.Width <= 25 Then
    Timer2.Enabled = False
  End If
End Sub
Private Sub Timer1\u Tick(发送方作为对象,e作为事件args)处理Timer1。Tick
如果面板1.宽度小于100,则
面板1.宽度+=50
其他面板1.宽度<150
面板1.宽度+=25
其他面板1.宽度>=150
Timer1.Enabled=False
ListBox1.Visible=True
如果结束
端接头
私有子Timer2_Tick(发送方作为对象,e作为事件参数)处理Timer2。Tick
如果ListBox1.可见,则
ListBox1.Visible=False
如果结束
如果面板1.宽度>100,则
面板1.宽度-=50
其他面板1.宽度>25,然后
面板1.宽度-=25

其他面板1.宽度vba???为什么计时器事件?使用鼠标事件(如mouseenter),当鼠标在面板上时,您希望它打开。@Protonix他使用计时器使面板处于动画状态(或者我理解是这样)@crono,这完全正确!事实上这是个好主意。这更具可读性。可读代码是更好的代码。如果我将其设置为不可见,用户是否仍能够意外单击不可见列表框内的按钮?@StreamingBits不,他不会。WinForms中的@StreamingBits列表框内没有按钮。但即使这样,如果父容器不可见,子控件也会随之不可见。当这种情况发生时,没有任何互动。