gpt4 book ai didi

c# - 如何在C# Form中mousedown时触发mousemove事件

转载 作者:太空宇宙 更新时间:2023-11-03 15:24:52 25 4
gpt4 key购买 nike

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

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

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

有什么解决办法吗?

最佳答案

这是因为 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 触发 UserControlMouseMove,将 UC 作为发件人和修改后的 鼠标事件参数:

private void theOtherPlace_MouseMove(object sender, MouseEventArgs e)
{
if (! theOtherPlace.ClientRectangle.Contains(e.Location))
{
Point pt = yourUserControl.PointToClient(Control.MousePosition);
if (yourUserControl.ClientRectangle.Contains(pt))
{
yourUserControl_MouseMove(listView1,
new MouseEventArgs(e.Button, e.Clicks, pt.X, pt.Y, e.Delta ) );
}
}
}

关于c# - 如何在C# Form中mousedown时触发mousemove事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35803907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com