【问题标题】:Sizing Box User Control尺寸框用户控制
【发布时间】:2012-03-18 18:35:51
【问题描述】:

我正在 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

【问题讨论】:

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


    【解决方案1】:

    看起来 y_differencex_difference 是使用可以相对于发生移动(或单击)的上下文。查看文章here

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

    始终使用 e.Location 应该给出正确的数字。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-05
        • 2022-01-09
        • 1970-01-01
        • 2020-07-30
        • 2011-08-08
        • 2019-12-31
        • 1970-01-01
        相关资源
        最近更新 更多