繁体   English   中英

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

[英]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的好例子,这使创建另一个例子有些多余:)

造成这种情况的原因是,与WindowsFormsWPF不同之处在于,事件被处理该事件的控件“阻止”(在WPF该事件将被推到父级,直到可视化树,或者朝相反的方向:从父级到子级) )。

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

有关如何处理它的更多详细示例,请参见此处:

如何在Winform应用程序中捕获鼠标移动事件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM