在控件容器中捕获Click / DoubleClick事件?

时间:2010-11-11 12:54:11

标签: c# winforms events

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

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

我无意浪费时间试图弄清楚为什么他们的控制行为如此奇怪。但我需要针对此行为的解决方法。有没有办法让鼠标点击这个控件传输到包含控件,所以我至少可以尝试为我的事件使用更可靠的源?

有关如何可靠地捕捉click / doubleclick事件的任何其他建议将非常感谢!

1 个答案:

答案 0 :(得分:3)

一种方法是添加应用程序级别的邮件过滤器。

您可以使用Application.AddMessageFilter(...).来执行此操作。调用的参数是实现IMessageFilter的实例对象,PreFilterMessage是一个只有一个名为{{1}}的方法的接口。在将应用程序中的每个Windows消息分派到适当的目标之前,将调用此方法。因此,您可以在将鼠标消息发送到您的问题控制之前窥探它们。这样你就可以随心所欲。