【问题标题】:Move scrollbars automatically when doing a rectangle selection for cropping an image in the picture box with panel's Autoscroll = True使用面板的 Autoscroll = True 进行矩形选择以裁剪图片框中的图像时自动移动滚动条
【发布时间】:2023-03-21 04:56:01
【问题描述】:

我在面板顶部有一个图片框..我有一个矩形选择,可用于选择图像的一部分进行裁剪..由于我已将面板的 Autoscroll 属性设置为 True,并且由于图像在图片框很大,我得到滚动条。但是为了选择图像的一部分进行裁剪,我需要将矩形拖到我可见的范围之外。当鼠标到达图片框的最右边时,我不能这样做。我想以一种方式设计它,当鼠标到达最右边时,我的滚动条应该自动向右移动。但是使用 Autoscroll 属性我无法获得滚动条价值观。有什么解决方法可以解决这个问题??

【问题讨论】:

  • 您可以从面板的 AutoScrollPosition 属性中获取它们。您可以指定它来强制面板滚动。

标签: vb.net picturebox autoscroll scrollbars


【解决方案1】:

使用 Timer 移动 AutoScrollPosition 属性可能会更顺畅一些:

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

确保计时器已启用:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 2012-10-01
    • 1970-01-01
    相关资源
    最近更新 更多