Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 滚动面板自动隐藏内部组件_Vb.net_Winforms - Fatal编程技术网

Vb.net 滚动面板自动隐藏内部组件

Vb.net 滚动面板自动隐藏内部组件,vb.net,winforms,Vb.net,Winforms,我的代码可以工作,但问题是我在其中放了一个列表框。我想确保即使用户将鼠标悬停在列表框上,窗格也会关闭 我有两个问题: 主要问题:面板的计时器不工作,因为listbox组件在某种程度上阻止了它。我不确定如何应对这种情况 我想隐藏或折叠列表框以获得视觉效果 这是我的密码: Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Panel1

我的代码可以工作,但问题是我在其中放了一个列表框。我想确保即使用户将鼠标悬停在列表框上,窗格也会关闭

我有两个问题:

  • 主要问题:面板的计时器不工作,因为listbox组件在某种程度上阻止了它。我不确定如何应对这种情况

  • 我想隐藏或折叠列表框以获得视觉效果

  • 这是我的密码:

    Public Class Form1
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Panel1.Dock = DockStyle.Left
        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 - 15
                End If
    
            ElseIf Panel1.Width <= 25 Then
                Timer2.Enabled = False
            End If
        End Sub
    
        Private Sub Panel1_MouseEnter(sender As Object, e As EventArgs) Handles Panel1.MouseEnter
            Timer1.Enabled = True
            Timer2.Enabled = False
        End Sub
    
    
        Private Sub Panel1_MouseLeave(sender As Object, e As EventArgs) Handles Panel1.MouseLeave
            Timer1.Enabled = False
            Timer2.Enabled = True
        End Sub
    
    End Class
    
    公共类表单1
    私有子表单1_Load(发送方作为对象,e作为事件参数)处理MyBase.Load
    面板1.Dock=DockStyle.左
    端接头
    私有子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.宽度-15
    如果结束
    
    ElseIf Panel1.Width列表框将触发面板的MouseEnter和MouseLeave事件

    因此,请评论一下这些事件:

    'Private Sub Panel1_MouseEnter(sender As Object, e As EventArgs) Handles Panel1.MouseEnter
    '    Timer1.Enabled = True
    '    Timer2.Enabled = False
    'End Sub
    
    'Private Sub Panel1_MouseLeave(sender As Object, e As EventArgs) Handles Panel1.MouseLeave
    '    Timer1.Enabled = False
    '    Timer2.Enabled = True
    '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
    
    Private Sub Timer3\u 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
    如果结束
    如果结束
    端接头
    
    我不确定它是否按预期的方式工作。e、 g
    如果Panel1.Width<50和Panel1.Width>25始终为false!你为什么这么说?如果Panel1.Width是40呢?如果是40,那么
    如果Panel1.Width>100,那么
    也是假的!更准确地说,如果执行了
    如果Panel1.Width<50和Panel1.Width>25,它将始终生成false。这是无法访问的,您是正确的。我会编辑它!现在不行。我错过了什么吗。这让一切都没有发生。我想让面板滑动!我只想让面板中的列表框在滑动打开(展开)之前不可见@StreamingBits确保启用了第三个计时器。它应该一直在运行。但是隐藏列表框有问题!我会想出办法的out@StreamingBits如果你不明白,那可能是个新问题。我对答案做了一个小的更新。