注册 登录
编程论坛 VB.NET论坛

VB2010如何编程实现图片移动

shk2016 发布于 2016-09-09 10:39, 8951 次点击
在VB2010中,用鼠标点击窗体上图形控件,移动到指定位置,最好有动画效果?
8 回复
#2
梦幻倩影2016-09-10 18:21
基本思路,先记下按下鼠标时的坐标
然后再得到放开鼠标时的坐标
计算得出,鼠标在纵向y,横向x的位移分别是多少,最后利用PicGrh.DrawImageUnscaled 重画图片

  
 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        '赋初值,图片初始值
        Me.m_Leftx = Me.PictureBox1.Location.X
        Me.m_Lefty = Me.PictureBox1.Location.Y
    End Sub

    Private Sub PictureBox1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
        '按下鼠标位置
        Me.Cursor = System.Windows.Forms.Cursors.Hand
        m_MousePosX = e.X
        m_MousePosY = e.Y
    End Sub

    Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
        '放开鼠标,计算移动位置,重定位图片位置
        m_DriftX = m_MousePosX - e.X
        m_DriftY = m_MousePosY - e.Y

        m_Leftx = m_Leftx - m_DriftX
        m_Lefty = m_Lefty - m_DriftY

        picturemove(sender, e)
        Me.Cursor = System.Windows.Forms.Cursors.Arrow
    End Sub
    Private Sub Form1_MouseWheel(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseWheel
        Static m As Integer
        If m > 1 And m <= 100 And e.Delta > 0 Then
            m = m + 5
        ElseIf m > 1 And m <= 100 And e.Delta < 0 Then
            m = m - 5
        Else
            m = 100
        End If
        Me.Opacity = m * 0.01
        '   TextBox1.Text = m
        Me.TopMost = True
    End Sub

    Private Sub picturemove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        Try
            Dim myBit As New System.Drawing.Bitmap(PictureBox1.Image)
            Dim myPicGrh As System.Drawing.Graphics = Me.PictureBox1.CreateGraphics
            myPicGrh.Clear(Me.PictureBox1.BackColor)
            myPicGrh.DrawImageUnscaled(myBit, m_Leftx - 152, m_Lefty)
            myBit.Dispose()
            myPicGrh.Dispose()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub
#3
shk20162016-09-25 17:15
回复 2楼 梦幻倩影
昨天才在一本书(VB2008 STEP BY STEP)看到,其实移动图片框特方便,VB2008以上支持如下方式移动(例如PICTUREBOX1):
picturebox1.left=picturebox1.left+50    '图片框横向右移动50个单位;
picturebox1.top=picturebox1.top+50      '图片框向下移动50个单位;
picturebox1.location= new point(200,100)   '图片框移动到指定坐标。
就这么简单,利用定时控件就可做出动画效果。


#4
梦幻倩影2016-09-26 14:23
如果只是移动picturebox,是可以象你这样,但是如果一张图片放大后,在控件中显示不全,而且又不想缩小,但要看到其它部位的图片呢?
#5
梦幻倩影2016-09-26 14:25
一张很大的图片,在控件中,只能显示左上角部份,现在想要拖动鼠标,显示右下角的部份,picturebox1.left=picturebox1.left+50  这样肯定不行
#6
shk20162016-09-27 16:06
回复 5楼 梦幻倩影
放大缩小图片框也极其的方便:
  PictureBox1.Width = PictureBox1.Width + 15
  PictureBox1.Height = PictureBox1.Height + 15
对图片进行横向和纵向放大
#7
梦幻倩影2016-09-28 09:21
看来SHK2016 还没看明白我要达到的效果:反正现在没事,截个图给你看看
首先一幅全图如下:
只有本站会员才能查看附件,请 登录

然后放大,只看到左上角
只有本站会员才能查看附件,请 登录

拖一下可看到图中间任何部分
只有本站会员才能查看附件,请 登录

再拖一下可以看到右下角部份
只有本站会员才能查看附件,请 登录
#8
shk20162016-09-29 16:25
回复 7楼 梦幻倩影
这么大个图片屏幕都装不下,我没移动过,我主要还是移动象棋子
#9
ferydear2016-10-25 14:07
楼主你是已经实现了吗,能说下怎么实现的吗。我最近也在做类似的,可以拖拉移动的地图图片。
1