2011-02-18 65 views

回答

6

ListView不支持拖放和拖放自然,但你可以用一小段代碼啓用:

http://support.microsoft.com/kb/822483

這裏有一個專門做從ListView拖和下降的例子到TreeView(這是一個專家性別更改鏈接,所以只需等待幾秒鐘,然後滾動至底部,在那裏你會找到答案):

http://www.experts-exchange.com/Programming/Languages/.NET/Visual_CSharp/Q_22675010.html

更新:從鏈接代碼:

  • 創建一個列表視圖和一個TreeView。 (在我的示例中,列表視圖名爲listView1,樹視圖名爲tvMain)
  • 在樹視圖上,將AllowDrop設置爲true。
  • 在列表視圖

private void listView1_ItemDrag(object sender, ItemDragEventArgs e) 
     { 
      listView1.DoDragDrop(listView1.SelectedItems, DragDropEffects.Copy); 
     } 

在從列表視圖這個例子中的項目將被複制到「下降」對象創建ItemDrag事件。 現在,在樹視圖創建一個DragEnter事件:

private void tvMain_DragEnter(object sender, DragEventArgs e) 
     { 
      e.Effect = DragDropEffects.Copy; 
     } 

這很容易。現在困難的部分開始了。下面的代碼將選定的(拖)列表視圖項現有節點(確保你至少有一個節點已經在你的樹視圖或例子會失敗!)

創建的樹狀dragDrop事件:

private void tvMain_DragDrop(object sender, DragEventArgs e) 
     { 
      TreeNode n; 

      if (e.Data.GetDataPresent("System.Windows.Forms.ListView+SelectedListViewItemCollection", false)) 
      { 
       Point pt = ((TreeView)sender).PointToClient(new Point(e.X, e.Y)); 
       TreeNode dn = ((TreeView)sender).GetNodeAt(pt); 
       ListView.SelectedListViewItemCollection lvi = (ListView.SelectedListViewItemCollection)e.Data.GetData("System.Windows.Forms.ListView+SelectedListViewItemCollection"); 

       foreach (ListViewItem item in lvi) 
       { 
        n = new TreeNode(item.Text); 
        n.Tag = item; 

        dn.Nodes.Add((TreeNode)n.Clone()); 
        dn.Expand(); 
        n.Remove(); 
       } 
      } 
     } 

改變光標拖動時,你必須創建爲ListView控件的GiveFeedback事件:

private void listView1_GiveFeedback(object sender, GiveFeedbackEventArgs e) 
     { 
      e.UseDefaultCursors = false; 

      if (e.Effect == DragDropEffects.Copy) 
      { 
       Cursor.Current = new Cursor(@"myfile.ico"); 
      } 
     } 

myfile.ico應該在同一個目錄中的.exe文件。

這只是一個簡單的例子。你可以用任何你喜歡的方式擴展它。

+0

謝謝,但是從1控件拖到另一個控件呢? –

+1

更新了一個例子。 – MusiGenesis

+1

感謝男人,對專家的性愛改變評論不錯:O –