然后我们再写“拖动”图片的功能。显然,这个功能只有当ViewMode=TrueSize的时候才有用。这个功能分三部分,首先是MouseDown事件: Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown If e.Button <> MouseButtons.Left Or ViewMode <> VMode.TrueSize Then Exit Sub Moving = True Me.Cursor = System.Windows.Forms.Cursors.Hand MousePos = Me.MousePosition OldScroll = Me.AutoScrollPosition End Sub
等等。在用户移动鼠标的时候,又要不停的计算图片框的滚动位置。为了避免再次“霸道”起来,我们又要拖进来一个Timer。设置Interval值为1。这个Timer是这样的: Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick MousePosNow = Me.MousePosition Dim DeltaPos As Point = New Point((MousePos.X - MousePosNow.X), (MousePos.Y - MousePosNow.Y)) Me.AutoScrollPosition = New Point(-OldScroll.X + DeltaPos.X, -OldScroll.Y + DeltaPos.Y) Timer2.Stop() End Sub
就四句话,应该不太难看懂吧。 所以MouseMove就这样: Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove If Moving Then Timer2.Start() End If End Sub
第三部分就是MouseUp事件了,就两句话: Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp Moving = False Me.Cursor = System.Windows.Forms.Cursors.Default End Sub