下面的代码,能实现,但效果非常糟糕,不能在实际中运用
Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
   MSsign = True
End SubPrivate Sub Image1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
   If MSsign Then
      Image1.Move X, Y
   End If
End SubPrivate Sub Image1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
   MSsign = False
End Sub 
在拖动的过程中,会发生闪动,如何消除,或者使用其它方法实现?

解决方案 »

  1.   

    Option ExplicitPrivate Const mc_border_color   As Long = vbBluePrivate m_x         As Long
    Private m_y         As Long
    Private m_w         As Long
    Private m_h         As Long
    Private m_lx        As Long
    Private m_ly        As Long
    Private m_moving    As BooleanPrivate Sub Image1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
        If Button = vbLeftButton Then
        
            m_x = x: m_y = y
            m_lx = Image1.left: m_ly = Image1.top
            m_w = Image1.Width: m_h = Image1.Height
            m_moving = True
            
            Me.DrawMode = vbNotXorPen
            Me.Line (m_lx, m_ly)-(m_lx + m_w, m_ly + m_h), mc_border_color, B
            
        End If
    End SubPrivate Sub Image1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
            
        Dim tx      As Long
        Dim ty      As Long
        
        If m_moving Then
            
            tx = Image1.left + (x - m_x)
            ty = Image1.top + (y - m_y)
            
            Me.Line (tx, ty)-(tx + m_w, ty + m_h), mc_border_color, B
            Me.Line (m_lx, m_ly)-(m_lx + m_w, m_ly + m_h), mc_border_color, B
            
            m_lx = tx
            m_ly = ty
            
        End If
        
    End SubPrivate Sub Image1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
        If m_moving And (Button = vbLeftButton) Then
            m_moving = False
            Me.Line (m_lx, m_ly)-(m_lx + m_w, m_ly + m_h), mc_border_color, B
            Me.DrawMode = vbCopyPen
            Image1.Move m_lx, m_ly
        End If
    End Sub如果画出来的框被其他控件挡住的话,把窗体(或PictureBox)的 ClipControls 设为 False。
      

  2.   

    把图片放在picturebox里,然后把drag什么的属性设为true
    这样就省得自己写了