1

VS 2008 を使用して、2 つの ListViews を持つ Windows フォームがあります (ListView1 と ListView2 と呼びます)。ListView1 には、ディレクトリからの FileNames が取り込まれます。項目が L​​istView1 から ListView2 にドラッグされると、いくつかのコードが実行されます。ListView2 から ListView1 にドラッグドロップすると、いくつかのコードが実行されます。私がやりたいことは、ListView2 からそれ自体にドラッグドロップした場合、コードを実行しないことです

ドロップ後に呼び出される dragDrop メソッドを次に示します。

private void view_DragDrop(object dropTarget, DragEventArgs e)

以下のようないくつかのアイテムを試しました。

ListView data = (ListView)e.Data.GetData("System.Windows.Forms.ListView")

これは null を返します。上記でやりたかったことは、data = dropTarget の場合は実行しないでください。

4

2 に答える 2

1

属性を使用して、イベントのソースを確認し、ターゲットが同じでないことを確認できOriginalSourceます。

したがって、あなたのDragDropイベントではListView2、次のようにします。

private void view_DragDrop(object dropTarget, DragEventArgs e)
{
    if (e.OriginalSource == ListView2)
       return;

    //Rest of the code here
}

これにより、ドラッグされたアイテムが でListView2コードの実行をトリガーするのを防ぐことができますListView2

MSDN の DragEventArgs クラス

于 2012-04-18T20:28:19.063 に答える
0

フォームのスコープで変数を作成します

object dfrom;
//your methods ect
    private void view_ItemDrag(Object sender, System.Windows.Forms.ItemDragEventArgs e)
    //your code to drag items
    dfrom = sender
}
private void view_DragDrop(object dropTarget, System.Windows.Forms.DragEventArgs e)
{
    if (dfrom == sender){return;}//this will protect both list boxes (assuming you can drag from both).
    //Your code
}
于 2012-04-18T21:01:54.297 に答える