0

我正在尝试将一些随机选择的文本从 Firefox 中的随机网页拖放到我的 Winform 应用程序的文本框中,但由于某种原因,我无法让它工作。我在控件(文本框)上将 AllowDrop 设置为 true,并且我正在处理 DragEnter 和 DragDrop 事件,所以这不是问题。任何人都知道问题可能是什么?

我的代码如下所示:

    public Form1()
    {
        InitializeComponent();

        tbISBN.DragDrop += new DragEventHandler(tbISBN_DragDrop);
        tbISBN.DragEnter += new DragEventHandler(tbISBN_DragEnter);
        tbISBN.AllowDrop = true;           
    }

    void tbISBN_DragEnter(object sender, DragEventArgs e)
    {
        foreach (var param in e.Data.GetFormats())
            Console.WriteLine(param);

        if ((e.AllowedEffect & DragDropEffects.All) != 0 && e.Data.GetDataPresent(typeof(string)))
        {
            e.Effect = DragDropEffects.All;
        }
    }

    void tbISBN_DragDrop(object sender, DragEventArgs e)
    {
        string stringData = e.Data.GetData(typeof(string)) as string;
        MessageBox.Show(stringData);
    }
4

4 回答 4

0

这应该让你开始

    public Form1()
    {
        InitializeComponent();
        AllowDrop = true;
        DragEnter += new DragEventHandler(Form1_DragEnter);
        DragDrop += new DragEventHandler(Form1_DragDrop);
    }

    void Form1_DragEnter(object sender, DragEventArgs e)
    {
        if ((e.AllowedEffect & DragDropEffects.All) != 0 && e.Data.GetDataPresent(typeof(string)))
        {
            e.Effect = DragDropEffects.All;
        }
    }

    void Form1_DragDrop(object sender, DragEventArgs e)
    {
        string stringData = e.Data.GetData(typeof(string)) as string;
        MessageBox.Show(stringData);
    }
于 2012-11-30T02:00:56.483 回答
0

用于e.Data.GetData(DataFormats.Html)检索文本和源 URL 或e.Data.GetData(DataFormats.Text仅用于文本。

于 2015-02-08T23:13:23.417 回答
0

在 Windows 7 上,当您以管理员身份运行 Visual Studio 而 Firefox 以较低权限运行时,它可能无法正常工作。看到这个答案:C# 拖放在 Windows 7 上不起作用

在 Visual Studio 之外运行程序就可以了。

于 2014-10-07T21:20:28.953 回答
0

对于 DragEnter 和 DragDrop,您应该告诉您要处理的数据类型。StringFormat如果您想要文本字符串本身,则应该使用来自 Firefox的文本。Text也是可能的,但不是那么灵活。

这适用于 Firefox 中的所有纯文本。当您复制属于链接的文本时,您将收到超链接目标。

void MainFormDragEnter(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.StringFormat)) 
        e.Effect = DragDropEffects.Copy;
}

void MainFormDragDrop(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.StringFormat)) {
        string dropText = (string)e.Data.GetData(DataFormats.StringFormat);
        Debug.WriteLine(dropText);
    }

}
于 2013-01-31T21:35:42.040 回答