使用数据网格视图滑动滚动
Swipe Scroll with a datagridview
有没有办法用datagridview调整滚动位置?我想实现让用户用手指上下或左右滚动,而不是将滚动条用于触摸屏目的。我知道某些控件内置了 AutoScrollPosition,但是我可以使用什么来更改滚动位置以使用 winforms 上的 datagridview 随手指移动? OS 是 Windows 7,框架是 4。我想在他们开始进行平移动作以打开平移并让它们滚动时制作它。
这就是我完成您所要求的方法。
Private Sub DataGridView_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles MyBase.MouseMove
Select Case e.Button
Case MouseButtons.Left
Dim mouseMovement As Point = GetMouseMovement(e.Location)
If Panning Then
If mouseMovement.X = 0 Then
Me.AutoScrollOffset = Point.Round(New PointF(-AutoScrollOffset.X, mouseMovement.Y - AutoScrollOffset.Y))
ElseIf mouseMovement.Y = 0 Then
Me.AutoScrollOffset = Point.Round(New PointF((mouseMovement.X / Convert.ToSingle(Math.Abs(mouseMovement.X))) * 10 - AutoScrollOffset.X, -AutoScrollOffset.Y))
Else
Me.AutoScrollOffset = Point.Round(New PointF((mouseMovement.X / Convert.ToSingle(Math.Abs(mouseMovement.X))) * 10 - AutoScrollOffset.X, mouseMovement.Y - AutoScrollOffset.Y))
End If
Me.ClearSelection()
End If
End Select
End Sub
''' <summary>
''' Checks if there is any mouse movement based on passed in point
''' </summary>
''' <remarks></remarks>
Private Function GetMouseMovement(ByVal point As Point) As Point
If Math.Abs(mouseDownPosition.X - point.X) >= SystemInformation.DoubleClickSize.Width Or
Math.Abs(mouseDownPosition.Y - point.Y) >= SystemInformation.DoubleClickSize.Height Then
_panning = True
Return New Point(point.X - mouseDownPosition.X, point.Y - mouseDownPosition.Y)
End If
_panning = False
Return New Point(0, 0)
End Function
有没有办法用datagridview调整滚动位置?我想实现让用户用手指上下或左右滚动,而不是将滚动条用于触摸屏目的。我知道某些控件内置了 AutoScrollPosition,但是我可以使用什么来更改滚动位置以使用 winforms 上的 datagridview 随手指移动? OS 是 Windows 7,框架是 4。我想在他们开始进行平移动作以打开平移并让它们滚动时制作它。
这就是我完成您所要求的方法。
Private Sub DataGridView_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles MyBase.MouseMove
Select Case e.Button
Case MouseButtons.Left
Dim mouseMovement As Point = GetMouseMovement(e.Location)
If Panning Then
If mouseMovement.X = 0 Then
Me.AutoScrollOffset = Point.Round(New PointF(-AutoScrollOffset.X, mouseMovement.Y - AutoScrollOffset.Y))
ElseIf mouseMovement.Y = 0 Then
Me.AutoScrollOffset = Point.Round(New PointF((mouseMovement.X / Convert.ToSingle(Math.Abs(mouseMovement.X))) * 10 - AutoScrollOffset.X, -AutoScrollOffset.Y))
Else
Me.AutoScrollOffset = Point.Round(New PointF((mouseMovement.X / Convert.ToSingle(Math.Abs(mouseMovement.X))) * 10 - AutoScrollOffset.X, mouseMovement.Y - AutoScrollOffset.Y))
End If
Me.ClearSelection()
End If
End Select
End Sub
''' <summary>
''' Checks if there is any mouse movement based on passed in point
''' </summary>
''' <remarks></remarks>
Private Function GetMouseMovement(ByVal point As Point) As Point
If Math.Abs(mouseDownPosition.X - point.X) >= SystemInformation.DoubleClickSize.Width Or
Math.Abs(mouseDownPosition.Y - point.Y) >= SystemInformation.DoubleClickSize.Height Then
_panning = True
Return New Point(point.X - mouseDownPosition.X, point.Y - mouseDownPosition.Y)
End If
_panning = False
Return New Point(0, 0)
End Function