C# 被拖动项的源

C# 被拖动项的源,c#,winforms,drag-and-drop,C#,Winforms,Drag And Drop,有没有办法知道拖动项目的来源? 也就是说,我们已经将图像从chrome/firefox/etc拖到winforms应用程序中,此时我想知道项目(chrome、ff等)的来源(可能是窗口句柄)。不是按照惯例。拖放操作对其来源越无知,其设计就越好 可以通过使用自定义格式向拖放操作添加额外元数据(字符串等)来标识源。您可以使用IDataObject.GetFormats方法在各种拖放上尝试“窥探”: private void Test_DragDrop(object sender, DragE

有没有办法知道拖动项目的来源?
也就是说,我们已经将图像从chrome/firefox/etc拖到winforms应用程序中,此时我想知道项目(chrome、ff等)的来源(可能是窗口句柄)。

不是按照惯例。拖放操作对其来源越无知,其设计就越好

可以通过使用自定义格式向拖放操作添加额外元数据(字符串等)来标识源。您可以使用IDataObject.GetFormats方法在各种拖放上尝试“窥探”:

    private void Test_DragDrop(object sender, DragEventArgs e)
    {
        string[] formats = e.Data.GetFormats();

        foreach (string s in formats)
        {
            try
            {
                string d = (string)e.Data.GetData(s);
                MessageBox.Show(s + "\n" + d);
            }
            catch { }
        }
    }
注意,在这个示例中,我强制将所有数据转换为字符串。它通常会抛出一些异常,因为可能还会附加非字符串值。例如,在Google Chrome中,复制一个字符串提供了8种不同的数据格式,其中只有5种是字符串


如果您希望启动自己的拖放操作并能够验证您是否是源,则可以使用自定义数据格式进行此操作。

否,我正在处理拖放接收器,无法扩展可拖动项。因此,为我提供的物品是原样的。我只想知道-谁是可拖动项的父项?拖动操作没有父项或源。你只能尝试破解它以识别其来源。你不需要知道来源。如果我有一个更好的想法,确切地说,为什么你需要知道它和你正在努力完成什么,可能有一个更好的方法来做到这一点。我想知道窗口标题。下面是一个简化的任务:删除一个项目后,应用程序应该说明它来自何处(例如,从chrome/FF/ie等中删除)——只是窗口的标题。你无法找到,这是D+D合同的一部分。