【问题标题】:How do I move an element by clicking and holding the object with the mouse?如何通过用鼠标单击并按住对象来移动元素?
【发布时间】:2012-06-25 19:27:44
【问题描述】:

我正在开发一个简单的程序,该程序要求我能够选择一个图片框并通过用鼠标拖动它来将其移动到新位置。这是我目前提出的所有相关代码。但是,当我运行程序时,它会尝试移动到我希望它去的地方,然后它似乎又回到了以前的位置。

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

变量

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) 处理 picbox.MouseDown startx = MousePosition.X starty = MousePosition.Y mdown = 真 valx = 假 值 = 假 结束子 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

【问题讨论】:

  • 用一个简单的表格和一个图片框尝试了你的代码。好消息是:它有效,坏消息是:我找不到你的错误在哪里。
  • 我确实有它在布局容器中。这和它有关系吗?
  • 这是一个winforms应用,对吧?您的图片框在哪种控制容器中?在我的测试中,没有任何容器,直接在表单的客户区,一切都按预期工作。

标签: vb.net mousemove


【解决方案1】:

将其从容器中取出。这可能就是给您带来问题的原因,因为您的代码对我来说非常完美。

【讨论】:

  • 天哪,这行得通。关于为什么这给我带来问题的任何想法?
  • 取决于容器,但如果它是一个流动容器,如果有任何东西停靠,那可能会导致问题。
【解决方案2】:

关闭Autosize 属性。

【讨论】:

    【解决方案3】:

    这对我有用:

    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
    

    【讨论】:

      【解决方案4】:

      开启AutoSize,确保picturebox的停靠关闭,并确保Anchor在左上

      【讨论】:

        猜你喜欢
        • 2019-10-27
        • 2018-11-19
        • 1970-01-01
        • 2020-03-18
        • 1970-01-01
        • 2020-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多