2012-04-18 81 views
1

使用VS 2008我有一個窗體與2個ListViews(我們將它們稱爲ListView1和ListView2)。 ListView1使用來自目錄的FileNames填充。當一個項目從ListView1拖到ListView2時,我有一些執行的代碼。當我從ListView2拖動ListView到一些代碼執行。我想要做的就是不執行,如果你從ListView2的DragDrop代碼到自身Windows窗體與列表視圖,拖放,需要源列表視圖

這裏是的DragDrop方法,它是一個下拉後調用:

private void view_DragDrop(object dropTarget, DragEventArgs e)

我已經嘗試了幾個項目,如如下:

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

返回null我想與上述要做的就是看看數據= DropTarget的,不執行。

回答

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 
} 
+0

這很好,謝謝! – DanO 2012-04-18 22:15:42

1

您可以通過使用OriginalSource屬性驗證事件的來源並確保目標不相同。

所以在你DragDrop事件對你ListView2,我會做這樣的事情:

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

    //Rest of the code here 
} 

這將阻止接到ListView2拖動到觸發ListView2你的代碼執行的任何項目。

DragEventArgs Class on MSDN

+0

消息「E.OriginalSource」 .'System.Windows.Forms.DragEventArgs的範圍不包含定義' OriginalSource'和沒有擴展方法'OriginalSource'接受類型'System.Windows.Forms.DragEventArgs'的第一個參數可以找到(你是否缺少使用指令或程序集引用?) – DanO 2012-04-18 20:43:30