2016-02-29 4 views
0

Я сумел получить некоторую форму прокрутки на моем FlowLayoutPanel при использовании сенсорного экрана, реализовав следующий код ...vb.net 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 прокручивается вправо, если я прокручиваю вверх, панель прокручивается вниз, немного похожая на веб-браузер ,

У кого-нибудь есть понимание? Я пробовал простой бит, изменяя знаки минуса на плюс и наоборот, но никакого эффекта.

Заранее спасибо.

+0

Итак, я обнаружил, что e.Location.X является представителем в контроле, а не контроль Родитель, что я пытаюсь прокрутить. После изменения e.Location на ... FlowLayoutPanelUsers.PointToClient (MousePosition) это сработало. На всякий случай, если кто-то хочет сделать аналогичный –

ответ

0

Пересмотренный код ...

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 
+0

, я пытаюсь использовать этот подход, чтобы добавить сенсорную прокрутку в панель flowlayout, которая довольно «переполнена» элементами управления. К сожалению, это работает только до тех пор, пока вы не трогаете один из элементов управления, а один из крошечных открытых разделов между элементами управления. FlowLayoutPanel, похоже, не имеет возможности keypreview, поэтому важные события для прокрутки теряются. Какие-либо предложения? – Destek