拖动项目的来源

时间:2011-12-13 19:54:52

标签: c# winforms drag-and-drop

有没有办法知道被拖动物品的来源是什么? 即我们已将图像从chrome / firefox / etc拖到winforms应用程序中,在下降时我想知道项目的来源(可能是窗口的句柄)(chrome,ff等)。

1 个答案:

答案 0 :(得分:1)

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

可以通过使用自定义格式向拖放操作添加额外的元数据(字符串等)来识别源。您可以使用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 { }
        }
    }

请注意,在此示例中,我强制将所有数据转换为字符串。它通常会抛出一些异常,因为还可能附加非字符串值。例如,在谷歌浏览器中,复制字符串提供了8种不同的数据格式,其中只有5种是字符串。

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