C#表单没有捕获任何鼠标事件

时间:2012-06-26 06:52:11

标签: c# .net winforms events

我在窗体上停靠了很少的控件(Label,Custom Textbox,Datagridview)。当我尝试将MouseMove事件挂钩到各个控件时,事件触发完全正常但是当我尝试将事件挂钩到表单本身时,mousemove事件根本不响应。可能的原因是什么?

编辑:

这是来自resources.cs的事件挂钩

this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.LogicSimulationViewerForm_MouseMove);

这是捕获事件处理的函数

private void LogicSimulationViewerForm_MouseMove(object sender, MouseEventArgs e)
        {
           //DOESN'T WORK!!!
        }

2 个答案:

答案 0 :(得分:3)

Winforms事件不像WPF或Html中那样冒泡。因此,如果控件停靠在窗体上,窗体不会暴露它自己的任何表面,也不会捕获任何鼠标事件。然而,“在水下”,所有窗口消息(鼠标移动都是Windows消息),确实传递了表单,因此可以捕获该消息。

修改 Tigran有linked作为使用IMessageFilter的一个很好的例子,这使得创建另一个例子有点多余:)

答案 1 :(得分:2)

原因是,WPFWindowsForms的差异导致事件被处理它的控件“阻止”(在WPF中,事件将被推送到父级直到视觉树,或相反的方向:从父母到孩子。)

因此,要捕获该事件,您需要在应用程序级别处理它,并且不订阅单个控件事件。

有关如何处理它的更详细示例,请查看此处:

How do I capture the mouse mouse move event in my winform application