0

Firefox 内のランダムな Web ページからランダムに選択したテキストを 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

Windows 7 では、Visual Studio を管理者として実行し、Firefox をより低い権限で実行すると機能しない場合があります。この回答を参照してください: Windows 7 で C# ドラッグ ドロップが機能しない

Visual Studio の外でプログラムを実行すると、うまくいきます。

于 2014-10-07T21:20:28.953 に答える
0

DragEnter と DragDrop の場合、処理するデータ型を指定する必要があります。Firefox からのテキストの場合StringFormat、テキスト文字列自体が必要な場合は使用する必要があります。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 に答える