带有列表视图的Windows窗体,拖放,需要源列表视图

时间:2012-04-18 20:17:01

标签: c# .net winforms listview

使用VS 2008我有一个带有2个ListView的窗体(我们称之为ListView1和ListView2)。 ListView1使用目录中的FileNames填充。当一个项目从ListView1拖到ListView2时,我有一些代码被执行。当我从ListView2 dragDrop到ListView1时,一些代码执行。我想要做的是,如果从ListView2拖拽到自身

,则不执行代码

这是在drop:

之后调用的dragDrop方法

private void view_DragDrop(object dropTarget, DragEventArgs e)

我尝试过以下几项:

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

这返回null我想用上面做的就是查看data = dropTarget,不执行。

2 个答案:

答案 0 :(得分:1)

您可以使用OriginalSource属性验证事件的来源并确保目标不同。

因此,在您DragDrop的{​​{1}}事件中,我会做以下事情:

ListView2

这将阻止任何从private void view_DragDrop(object dropTarget, DragEventArgs e) { if (e.OriginalSource == ListView2) return; //Rest of the code here } 拖出的项目在ListView2中触发您的代码执行。

DragEventArgs Class on MSDN

答案 1 :(得分: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
}