如何在Word中捕获拖放事件?

时间:2011-06-21 14:52:58

标签: c# .net ms-word vsto

我正在为Microsoft Word创建一个加载项(使用C#),并希望在从任何源拖动某些文本/图像等并将其放入Word时触发某些功能。所以基本上我想在Word中捕获Drop事件。但是,我无法找到任何有助于此的Word API。你能帮忙吗?

3 个答案:

答案 0 :(得分:3)

不存在这样的野兽。 您可以期待的最好(简单)方法是观察DocumentChange事件,并尝试监视更改的内容(它将位于“选择”的当前位置)。

一种非常强硬的方法是对主Word窗口进行子类化,并观察正在交换的拖放消息,并在适当时拦截它们。

答案 1 :(得分:0)

有时可以使用SelectionChange事件。有时,因为选择并不总是包含已删除的内容。例如。如果将图像拖放到文档中,则不会选择图像。

答案 2 :(得分:0)

更好的替代方法是使用覆盖在Word窗口顶部的透明窗口。当拖动过程开始并放置在文档窗口的顶部时,将启动此窗口。然后,此窗口而不是Word接收放置操作,因此您确切地知道放入的内容以及放置的位置。然后,您可以将这些位置坐标转换为相应的文档位置(使用RangeFromPoint()类的Window方法),并对删除的数据执行任何操作。在此之后,您只需隐藏透明窗口,一切都恢复正常。

this excellent MSDN article中提供了此方法的完整实现以及源代码。