Vb.net 使用面板的Autoscroll=True在图片框中进行矩形选择以裁剪图像时,自动移动滚动条
我在面板顶部有一个picturebox。我有一个矩形选择,可用于选择图像的一部分进行裁剪。由于我已将面板的Autoscroll属性设置为True,并且由于图片框中的图像很大,我得到了滚动条。但要选择图像的一部分进行裁剪,我需要将矩形拖动到我可以看到的范围之外。当鼠标到达picturebox的最右边时,我不能这样做。。我想设计一种方式,当鼠标到达最右边时,我的滚动条会自动向右移动。。但是使用Autoscroll属性,我无法获取滚动条的值。是否有任何解决此问题的方法 使用计时器移动AutoScrollPosition属性时,这可能会更平滑一些:Vb.net 使用面板的Autoscroll=True在图片框中进行矩形选择以裁剪图像时,自动移动滚动条,vb.net,picturebox,autoscroll,scrollbars,Vb.net,Picturebox,Autoscroll,Scrollbars,我在面板顶部有一个picturebox。我有一个矩形选择,可用于选择图像的一部分进行裁剪。由于我已将面板的Autoscroll属性设置为True,并且由于图片框中的图像很大,我得到了滚动条。但要选择图像的一部分进行裁剪,我需要将矩形拖动到我可以看到的范围之外。当鼠标到达picturebox的最右边时,我不能这样做。。我想设计一种方式,当鼠标到达最右边时,我的滚动条会自动向右移动。。但是使用Autoscroll属性,我无法获取滚动条的值。是否有任何解决此问题的方法 使用计时器移动AutoScrol
Private horzMove As ArrowDirection = -1
Private vertMove As ArrowDirection = -1
Private Sub PictureBox1_MouseMove(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseMove
If e.Button = MouseButtons.Left Then
If Panel1.AutoScrollPosition.X + e.Location.X > Panel1.ClientSize.Width Then
horzMove = ArrowDirection.Right
ElseIf Panel1.AutoScrollPosition.X + e.Location.X < 0 Then
horzMove = ArrowDirection.Left
Else
horzMove = -1
End If
If Panel1.AutoScrollPosition.Y + e.Location.Y > Panel1.ClientSize.Height Then
vertMove = ArrowDirection.Down
ElseIf Panel1.AutoScrollPosition.Y + e.Location.Y < 0 Then
vertMove = ArrowDirection.Up
Else
vertMove = -1
End If
End If
End Sub
Private Sub PictureBox1_MouseUp(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseUp
horzMove = -1
vertMove = -1
End Sub
您可以从面板的AutoScrollPosition属性获取它们。您可以将其指定为强制面板滚动。
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
If horzMove > -1 Or vertMove > -1 Then
Dim newLeft As Integer = -Panel1.AutoScrollPosition.X
Dim newTop As Integer = -Panel1.AutoScrollPosition.Y
Select Case horzMove
Case ArrowDirection.Left
newLeft = -Panel1.AutoScrollPosition.X - 32
Case ArrowDirection.Right
newLeft = -Panel1.AutoScrollPosition.X + 32
End Select
Select Case vertMove
Case ArrowDirection.Down
newTop = -Panel1.AutoScrollPosition.Y + 32
Case ArrowDirection.Up
newTop = -Panel1.AutoScrollPosition.Y - 32
End Select
Panel1.AutoScrollPosition = New Point(newLeft, newTop)
End If
End Sub