我用C#格式构建一个UserControl。 我在事件列表中使用MouseMove事件。 一切正常。
然后,我想检测是否按下鼠标右键或左键。 MouseEventArgs提供要使用的Button状态。
问题是当鼠标上的左键已按下UserControl外的某处,然后将光标移到UserControl上,MouseMove事件就不会触发。
有没有解决方案?
答案 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