【问题标题】:Slider panel that hides components inside it将组件隐藏在其中的滑块面板
【发布时间】:2014-04-20 04:15:16
【问题描述】:

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

问题是我不知道如何让组件在展开之前不显示。

 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

【问题讨论】:

  • vba???为什么是 TIMEr 事件?当鼠标悬停在面板上时,使用您希望它打开的鼠标事件(如 mouseenter)。
  • @Plutonix 他使用计时器使面板具有动画效果(或者我理解)
  • @crono,完全正确!

标签: vb.net panel


【解决方案1】:

您可能应该重命名您的计时器以使其保持直截了当,例如 SlideOpenTimer 和 SlideCloseTimer 等。这样会更容易理解计时器的用途。

我重新设计了您的计时器事件以在关闭计时器启动时隐藏 ListBox,并在面板达到其全宽时显示 ListBox:

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

【讨论】:

  • 其实……这是个好主意。这更具可读性。可读的代码是更好的代码。如果我将其设置为不可见,用户是否仍然能够意外单击不可见列表框中的按钮?
  • @StreamingBits 不,他不会。
  • @StreamingBits WinForms 中的列表框内部没有按钮。但即使他们这样做了,如果父容器不可见,子控件也会随之不可见。发生这种情况时,没有什么可以互动的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多