1

使用 VS 2008 我有一个带有 2 个 ListViews 的 windows 窗体(我们将它们称为 ListView1 和 ListView2)。ListView1 由目录中的文件名填充。当一个项目从 ListView1 拖到 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 回答