【问题标题】:vb.net FlowLayoutPanel Touchscreen Scrollingvb.net FlowLayoutPanel 触摸屏滚动
【发布时间】:2016-06-12 15:25:54
【问题描述】:

通过实现以下代码,我在使用触摸屏时设法在 FlowLayoutPanel 上实现某种形式的滚动...

Dim mouseDownPoint As Point
Private Sub FlowLayoutPanelUsers_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles FlowLayoutPanelUsers.MouseDown
    If (e.Button = MouseButtons.Left) Then
        Me.mouseDownPoint = e.Location
    End If

End Sub

Private Sub FlowLayoutPanelUsers_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles FlowLayoutPanelUsers.MouseMove
    If (e.Button <> MouseButtons.Left) Then
        Return
    End If

    If ((mouseDownPoint.X = e.Location.X) _
                AndAlso (mouseDownPoint.Y = e.Location.Y)) Then
        Return
    End If

    Dim currAutoS As Point = FlowLayoutPanelUsers.AutoScrollPosition
    If (mouseDownPoint.Y > e.Location.Y) Then
        'finger slide UP
        If (currAutoS.Y <> 0) Then
            currAutoS.Y = (Math.Abs(currAutoS.Y) - 1)
        End If

    ElseIf (mouseDownPoint.Y < e.Location.Y) Then
        'finger slide down
        currAutoS.Y = (Math.Abs(currAutoS.Y) + 1)
    Else
        currAutoS.Y = Math.Abs(currAutoS.Y)
    End If

    If (mouseDownPoint.X > e.Location.X) Then
        'finger slide left
        If (currAutoS.X <> 0) Then
            currAutoS.X = (Math.Abs(currAutoS.X) - 1)
        End If

    ElseIf (mouseDownPoint.X < e.Location.X) Then
        'finger slide right
        currAutoS.X = (Math.Abs(currAutoS.X) + 1)
    Else
        currAutoS.X = Math.Abs(currAutoS.X)
    End If

    FlowLayoutPanelUsers.AutoScrollPosition = currAutoS
    mouseDownPoint = e.Location
    'IMPORTANT
End Sub

这是我已经在 stackoverflow 上找到的一些代码,非常感谢您!

如果可能的话,我希望这段代码做的是反转它的滚动方式,所以如果我向左滚动,FlowLayoutPanel 向右滚动,如果我向上滚动,面板向下滚动,有点像网络浏览器。

有人对此有任何见解吗?我尝试了将减号反转为加号的简单方法,反之亦然,但没有效果。

提前致谢。

【问题讨论】:

  • 好的,所以我发现 e.Location.X 代表控件,而不是我要滚动的父控件。将 e.Location 更改为... FlowLayoutPanelUsers.PointToClient(MousePosition) 后,这很有效。以防万一有人想做类似的事情

标签: vb.net flowlayoutpanel


【解决方案1】:

修改后的代码...

Dim mouseDownPoint As Point
Private Sub FlowLayoutPanelUsers_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles FlowLayoutPanelUsers.MouseDown
   If (e.Button = MouseButtons.Left) Then
       Me.mouseDownPoint = FlowLayoutPanelUsers.PointToClient(MousePosition)
   End If

End Sub

Private Sub FlowLayoutPanelUsers_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles FlowLayoutPanelUsers.MouseMove
   If (e.Button <> MouseButtons.Left) Then
       Return
   End If

   If ((mouseDownPoint.X = FlowLayoutPanelUsers.PointToClient(MousePosition).X) _
               AndAlso (mouseDownPoint.Y = FlowLayoutPanelUsers.PointToClient(MousePosition).Y)) Then
       Return
   End If

   Dim currAutoS As Point = FlowLayoutPanelUsers.AutoScrollPosition
   If (mouseDownPoint.Y > FlowLayoutPanelUsers.PointToClient(MousePosition).Y) Then
       'finger slide UP
       If (currAutoS.Y <> 0) Then
           currAutoS.Y = (Math.Abs(currAutoS.Y) - 1)
       End If

   ElseIf (mouseDownPoint.Y < FlowLayoutPanelUsers.PointToClient(MousePosition).Y) Then
       'finger slide down
       currAutoS.Y = (Math.Abs(currAutoS.Y) + 1)
   Else
       currAutoS.Y = Math.Abs(currAutoS.Y)
   End If

   If (mouseDownPoint.X > FlowLayoutPanelUsers.PointToClient(MousePosition).X) Then
       'finger slide left
       If (currAutoS.X <> 0) Then
           currAutoS.X = (Math.Abs(currAutoS.X) - 1)
       End If

   ElseIf (mouseDownPoint.X < FlowLayoutPanelUsers.PointToClient(MousePosition).X) Then
       'finger slide right
       currAutoS.X = (Math.Abs(currAutoS.X) + 1)
   Else
       currAutoS.X = Math.Abs(currAutoS.X)
   End If

   FlowLayoutPanelUsers.AutoScrollPosition = currAutoS
   mouseDownPoint = FlowLayoutPanelUsers.PointToClient(MousePosition)
   'IMPORTANT
End Sub

【讨论】:

  • 我正在尝试使用这种方法将触摸滚动添加到一个非常“拥挤”的带有控件的流程布局面板中。不幸的是,这仅适用于您不触摸其中一个控件,而是触摸控件之间的微小开放部分之一。 FlowLayoutPanel 似乎没有 keypreview 功能,因此滚动的重要事件丢失了。有什么建议吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-01
  • 2016-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多