【问题标题】:How to find the origin of a DragDrop event如何找到 DragDrop 事件的来源
【发布时间】:2012-12-13 13:53:42
【问题描述】:

我找到了这个CodeProject article,了解如何在将附件从 Microsoft Outlook 拖入 .net 控件时获取数据。

但是在将其他类型的数据拖入控件时,代码会抛出异常,所以我只想在从Outlook拖拽数据的具体情况下使用该方法。

不幸的是,我看不到明确的方法来确定 DragDrop 事件的来源,因此实际上无法判断何时从 Outlook 中拖动了文件。

我是否遗漏了一些明显的东西?

【问题讨论】:

  • 你能把你的drop代码包装在一个try/catch中来抑制异常,如果有错误什么都不做吗?
  • 是的,但如果我这样做,我将依赖代码not 来引导我完成“这不是来自 Outlook”的代码。如果有人放入 看起来 像 Outlook DragDrop 但不是的文件,那么我的代码将尝试处理它,结果可能出乎意料。我更喜欢可以确定“这来自 Outlook,因此执行此操作”的代码。
  • 在放置代码的开头放置一个断点,然后检查放置文件中的数据,看看你是否看到任何特定于 Outlook 的内容,如果那里没有任何帮助,那么你就是可能不走运

标签: .net drag-and-drop outlook


【解决方案1】:

无法准确发现拖动数据的来源在很大程度上是 D+D 的设计特点。它有助于将拖动源与接收数据的进程完全隔离。在 Windows 中非常重要,它使得从 64 位进程拖入 32 位进程变得简单。它完全避免了让进程正确互操作的许多麻烦。只有数据很重要。

您需要在 DragEnter 事件处理程序中筛选拖动的数据,并确保它是您知道如何处理的数据。主要的协议是 e.Data.GetDataPresent() ,它告诉您数据具有正确的格式。除非您对所看到的内容感到满意,否则不要设置 e.Effect。

DragDrop 事件处理程序随后应接受数据。出现异常并不完全出乎意料,特别是如果您在 DragEnter 中没有很好地筛选它。否则,这不会导致您的程序崩溃,异常被吞没并且没有任何反应。使用 Debug + Exceptions 调试您的代码,勾选 CLR 异常的 Thrown 复选框。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    相关资源
    最近更新 更多