在控件容器中捕获单击/双击事件?

Sha*_*ica 4 c# events winforms te-edit

我们的项目中有一个由 SubSystems.com 制作的第三方控件,称为TE Edit Control,也称为“Tern”,有点像文字处理器模拟器。我已经通过 SO 搜索了其他使用此控件的人,但它似乎不是很受欢迎。他们没有任何支持联系方式;他们向任何需要产品帮助的人收费。

无论如何,在他们控制的事件中发生了一些非常古怪的事情 - 特别是 MouseClick 和 MouseDoubleClick。如果文档中有图像,并且双击该图像,则不会触发任何事件。但是,如果您随后单击文档正文,则会突然触发控件的DoubleClick事件,而不是单击事件。看起来该事件正在某个地方排队并且在错误的时间醒来。

我无意浪费时间去弄清楚为什么他们的控件表现得如此奇怪。但我需要针对这种行为的解决方法。有什么方法可以使该控件上的鼠标单击传输到包含的控件,这样我至少可以尝试为我的事件使用更可靠的源?

任何有关如何可靠地捕获单击/双击事件的其他建议将不胜感激!

Phi*_*ght 5

一种方法是添加应用程序级消息过滤器。

您可以通过使用来完成此操作。Application.AddMessageFilter(...).调用的参数是一个实例对象,它实现了IMessageFilter一个接口,只有一个名为 的方法PreFilterMessage。在将应用程序中的每个 Windows 消息分派到适当的目标之前,都会调用此方法。因此,您可以在鼠标消息发送到您的问题控制之前监听它们。这样你就可以做任何你喜欢做的事。