尺寸框用户控制

时间:2012-03-18 18:35:51

标签: .net vb.net winforms user-controls move

我在vb.net中编写一个控件,允许用户调整大小。到目前为止,调整大小的工作,但我无法正常工作,而不是移动鼠标移动的地方,它似乎闪烁在两个位置之间,但我无法弄清楚这些位置来自何处。它遵循鼠标。我知道解释不是很好所以这里有一些代码,所以你可以看到你自己:pastebin

道歉这种糟糕的质量(请指出不好的东西,所以我可以纠正),但这真的给了我一个噩梦,我想不出一个干净的方式来写这个。

如果有人对于为什么它不会移动到正确的位置有任何答案,我将非常感激!

编辑:要清除代码一点,移动发生在所选句柄为“m”的位置。这部分是什么:

If SelectedHandle.Contains("m") Then
    If e.Button = MouseButtons.None Then
        SelectedHandle = ""
    Else
        Me.Location = e.Location
    End If
End If

将其更改为此工作,但它会跳转到控件的中间,而我希望它相对于用户在控件上单击鼠标的位置移动

If SelectedHandle.Contains("m") Then
    If e.Button = MouseButtons.None Then
        SelectedHandle = ""
    Else
        Dim newloc = Me.Location
        newloc.Offset(e.X, e.Y)
        newloc.Offset(-0.5 * Width, -0.5 * Height)
        Me.Location = newloc
    End If
End If

2 个答案:

答案 0 :(得分:2)

看起来 y_difference x_difference 是使用 X Y 坐标来计算的,这些坐标可以相对于移动(或点击)发生的上下文。查看文章here

  

例如,处理Control.MouseMove事件时,鼠标坐标值相对于引发事件的控件的坐标

始终使用 e.Location 应该提供正确的数字。

答案 1 :(得分:0)

问题是我需要将鼠标的偏移量存储在鼠标上,而不是在移动时。一个愚蠢的错误!新代码为here。它现在按预期工作,尽管代码仍然是非常特殊的。