使用 VS 2008,我有一个包含 2 个 ListView 的窗口窗体(我们称它们为 ListView1 和 ListView2)。 ListView1 填充了目录中的文件名。 当一个项目从列表视图 1 拖动到 ListView2 时,我有一些代码被执行。 当我将拖放从列表视图 2 拖到 ListView1 时,会执行一些代码。 我想做的是,如果您从 ListView2 拖放到自身上,则不执行代码
下面是在删除后调用的 dragDrop 方法:
private void view_DragDrop(object dropTarget, DragEventArgs e)
我尝试了一些项目,例如:
ListView data = (ListView)e.Data.GetData("System.Windows.Forms.ListView")
这返回 null 我想对上面的内容做的是查看数据是否 = dropTarget,不执行。
您可以使用 OriginalSource
属性验证事件的来源并确保目标不同。
所以在你的ListView2
DragDrop
活动中,我会做这样的事情:
private void view_DragDrop(object dropTarget, DragEventArgs e)
{
if (e.OriginalSource == ListView2)
return;
//Rest of the code here
}
这将防止任何从ListView2
中拖动的项目触发ListView2
中的代码执行。
MSDN 上的 DragEventArgs 类
表单范围内创建一个变量
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
}