【问题标题】:Windows form with list views, dragging and dropping, need source list view带有列表视图的Windows窗体,拖放,需要源列表视图
【发布时间】:2012-04-18 20:17:01
【问题描述】:

使用 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,不要执行。

【问题讨论】:

    标签: c# .net winforms listview


    【解决方案1】:

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

    所以在你的ListView2 上的DragDrop 事件中,我会做这样的事情:

    private void view_DragDrop(object dropTarget, DragEventArgs e)
    {
        if (e.OriginalSource == ListView2)
           return;
    
        //Rest of the code here
    }
    

    这将防止从ListView2 拖出的任何项目触发您在ListView2 中的代码执行。

    DragEventArgs Class on MSDN

    【讨论】:

    • “E.OriginalSource”的消息。“System.Windows.Forms.DragEventArgs”不包含“OriginalSource”的定义,并且没有扩展方法“OriginalSource”接受“System”类型的第一个参数。可以找到 Windows.Forms.DragEventArgs'(您是否缺少 using 指令或程序集引用?)
    【解决方案2】:

    在表单范围内为您创建一个变量

    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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-31
      • 1970-01-01
      • 2015-06-04
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多