gpt4 book ai didi

c# - Winforms : Intercepting Mouse Event on Main Form first, 不在控件上

转载 作者:太空狗 更新时间:2023-10-29 20:11:40 24 4
gpt4 key购买 nike

肯定有一种方便的方法可以做到这一点:

我已经在我的主窗体上实现了鼠标拖动行为的“移动窗口”,
我希望 MouseClick/Move 事件被窗体拦截,而不是被其中的控件拦截。

我想找到一个等效于/复制鼠标事件的“KeyPreview”属性

此外,我想避免在 12 个控件的鼠标事件中分别将鼠标事件重定向到主窗体方法 12 次(这是迄今为止我发现的丑陋的解决方法)

有什么想法吗?

最佳答案

订阅所有控件的 MouseMove 事件(考虑对嵌套控件递归执行)

foreach (Control control in Controls)
control.MouseMove += RedirectMouseMove;

并在此事件处理程序中引发 MouseMove

private void RedirectMouseMove(object sender, MouseEventArgs e)
{
Control control = (Control)sender;
Point screenPoint = control.PointToScreen(new Point(e.X, e.Y));
Point formPoint = PointToClient(screenPoint);
MouseEventArgs args = new MouseEventArgs(e.Button, e.Clicks,
formPoint.X, formPoint.Y, e.Delta);
OnMouseMove(args);
}

请记住,控件接收带有控件本地坐标的 MouseEvents。所以你需要把它转换成表格坐标。嵌套控件可能存在缺点,但我将其留给您(例如调用 Parent.PointToClient)

更新:您仍然可以处理控制事件 - 只需再订阅一次事件即可。

关于c# - Winforms : Intercepting Mouse Event on Main Form first, 不在控件上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4991044/

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