将pictureBox的角落放在面板边界之外

时间:2014-01-15 07:46:18

标签: .net vb.net winforms panel picturebox

这是我的代码:

Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles PictureBox1.MouseMove
    If (e.Button = Windows.Forms.MouseButtons.Left) Then
        Me.PictureBox1.Location = New Point((Me.pbpos.X + (Control.MousePosition.X - Me.offset.X)), _
                                            (Me.pbpos.Y + (Control.MousePosition.Y - Me.offset.Y)))
    End If
End Sub

这是图片,尚未拖出。当然它不适合屏幕,虽然顶部和左侧是图片的边缘。 (灰色是面板)
enter image description here

现在,如果我将它向左拖动,这就是它的样子。
enter image description here
这种情况是就好了,因为图片真的很大,这就是为什么我需要能够拖动它..正如你在右下角看到的,现在,面板是可见的因为我拖了左上角的图片太多了(这不对)

现在,我真正想要的是它看起来像这样。
enter image description here
当我拖动时,如图片#2 我希望图片的边缘保持在那里。用户现在必须无法将其进一步拖到左上角,因为这是图片的最后一部分(从技术上讲,用户必须无法看到作为面板的背景)同样适用于另一方。

希望这更清楚:)

1 个答案:

答案 0 :(得分:2)

试试这段代码:

Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles PictureBox1.MouseMove
    If (e.Button = Windows.Forms.MouseButtons.Left) Then

        Dim x As Integer = (Me.pbpos.X + (Control.MousePosition.X - Me.offset.X))
        Dim y As Integer = (Me.pbpos.Y + (Control.MousePosition.Y - Me.offset.Y))

        x = Math.Min(Math.Max(x, -(Me.PictureBox1.Width - Me.Panel1.Right)), 0)
        y = Math.Min(Math.Max(y, -(Me.PictureBox1.Height - Me.Panel1.Bottom)), 0)

        Me.PictureBox1.Location = New Point(x, y)

    End If
End Sub