2012-06-25 48 views
2

我正在研究一个简单的程序,它需要我能够选择一个图片框,并通过用鼠标拖动它将其移动到一个新的位置。这是我目前提出的所有相关代码。但是,当我运行该程序时,它会尝试移动到我想要的位置,然后它会恢复到之前的位置。如何通过单击并用鼠标按住对象来移动元素?

编辑:它在一个容器中。如果这是任何相关性。

变量

Dim startx As Integer 
Dim starty As Integer 
Dim endy As Integer 
Dim endx As Integer 
Dim finalx As Integer 
Dim finaly As Integer 
Dim mdown As Boolean 
Dim valx As Boolean 
Dim valy As Boolean 

代码,以使图像移动

 
    Private Sub picbox_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles picbox.MouseDown 
     startx = MousePosition.X 
     starty = MousePosition.Y 
     mdown = True 
     valx = False 
     valy = False 
    End Sub

Private Sub Main_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove End Sub Private Sub picbox_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles picbox.MouseMove 'Check if mouse=down If mdown = True Then endx = (MousePosition.X - Me.Left) endy = (MousePosition.Y - Me.Top) If valy = False Then starty = endy - sender.top valy = True End If If valx = False Then startx = endx - sender.left valx = True End If sender.left = endx - startx sender.top = endy - starty End If End Sub Private Sub picbox_MouseUp(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles picbox.MouseUp mdown = False valx = False valy = False End Sub

+0

想你的代码用一个简单的形式,只是一个图片框。好消息是:它有效,坏消息是:我找不到你的错误。 – Steve

+0

我确实在布局容器中有它。这可能与它有关吗? – nick122

+0

这是一个winforms应用程序,对吧?你在哪种控制容器中拥有你的图片盒?在我的测试中,没有任何容器,直接在表单的客户区域,一切都按预期工作。 – Steve

回答

2

删除它从容器中。这可能是因为你的代码完全适合我,所以会给你带来问题。

+0

圣洁的废话,工作。任何想法为什么这给我的问题? – nick122

+0

取决于容器,但如果它是流动容器,如果有任何东西被停靠,那可能会导致问题。 – FreeSnow

1

关闭Autosize财产。

+0

它已经关闭 – nick122

+0

@ Nick122 - 无论是窗体,容器还是其他所有可见且可能涉及锚定的控件?容器是哪种类型? –

1

打开自动调整大小的,确保PictureBox的对接被关闭,并确保锚左上角

0

这个工作对我来说:

Private _isMoved As Boolean 
Private _x As Integer 
Private _y As Integer 

Private Sub Control_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Control.MouseDown 
     _isMoved = True 
     _x = e.Location.X 
     _y = e.Location.Y 
    End Sub 

Private Sub Control_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Control.MouseMove 
    If _isMoved Then 
     Control.Location = New Point(Control.Location.X + (e.Location.X - _x), Control.Location.Y + (e.Location.Y - _y)) 
    End If 
End Sub 

Private Sub Control_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Control.MouseUp 
    _isMoved = False 
End Sub 
相关问题