如何在C#Form中以mousedown触发mousemove事件

时间:2016-03-04 18:54:38

标签: c# user-controls

我用C#格式构建一个UserControl。 我在事件列表中使用MouseMove事件。 一切正常。

然后,我想检测是否按下鼠标右键或左键。 MouseEventArgs提供要使用的Button状态。

问题是当鼠标上的左键已按下UserControl外的某处,然后将光标移到UserControl上,MouseMove事件就不会触发。

有没有解决方案?

1 个答案:

答案 0 :(得分:0)

这是因为MouseDown发生在其他地方,因此其他地方的MouseMove仍然在发生。

这是一件好事,所以你不要因为碰巧滑倒一边而丢失事件,例如从滚动条中移开。

如果你真的想阻止那个特殊地方发生的好事,你可以释放正在进行的鼠标捕捉......:

private void theOtherPlace_MouseMove(object sender, MouseEventArgs e)
{
    if (! theOtherPlace.ClientRectangle.Contains(e.Location))
    {
        User32_DLL.ReleaseCapture();
    }
}

使用此助手类:

using System.Runtime.InteropServices;
..
public static class User32_DLL
{
    [DllImportAttribute("user32.dll")]
    public static extern bool ReleaseCapture();
}

不确定这是不是一个好主意!如果我可以依靠按下的鼠标按钮仍然按照它应该的方式工作,我总是非常高兴。

或者您可以从另一个MouseMove触发UserControl的{​​{1}},将UC作为发件人传递,并修改为MouseMove

MouseEventArgs