[英]C# Form not catching any mouse event
我只有几个控件(标签,自定义文本框,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!!!
}
Winforms事件不会像在WPF或HTML中那样冒泡。 因此,如果控件停靠在窗体上,则窗体不会暴露其自身的任何表面,也不会捕获任何鼠标事件。 但是,在“水下”,所有Windows消息(鼠标移动就是Windows消息)都可以通过表格,因此可以捕获该消息。
编辑 Tigran 链接到一个使用IMessageFilter的好例子,这使创建另一个例子有些多余:)
造成这种情况的原因是,与WindowsForms
中WPF
不同之处在于,事件被处理该事件的控件“阻止”(在WPF
该事件将被推到父级,直到可视化树,或者朝相反的方向:从父级到子级) )。
因此,要捕获该事件,您需要在应用程序级别对其进行处理,并且不要订阅单个控件事件。
有关如何处理它的更多详细示例,请参见此处:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.