如果不可能,我也可以使用2個TreeView控件。我在第二個TreeView控件中沒有層次結構。它會像某種存儲庫一樣行事。是否有可能從ListView拖放到WinForms中的TreeView?
任何代碼示例或教程都會非常有幫助。
如果不可能,我也可以使用2個TreeView控件。我在第二個TreeView控件中沒有層次結構。它會像某種存儲庫一樣行事。是否有可能從ListView拖放到WinForms中的TreeView?
任何代碼示例或教程都會非常有幫助。
ListView
不支持拖放和拖放自然,但你可以用一小段代碼啓用:
http://support.microsoft.com/kb/822483
這裏有一個專門做從ListView
拖和下降的例子到TreeView
(這是一個專家性別更改鏈接,所以只需等待幾秒鐘,然後滾動至底部,在那裏你會找到答案):
http://www.experts-exchange.com/Programming/Languages/.NET/Visual_CSharp/Q_22675010.html
更新:從鏈接代碼:
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文件。
這只是一個簡單的例子。你可以用任何你喜歡的方式擴展它。
謝謝,但是從1控件拖到另一個控件呢? –
更新了一個例子。 – MusiGenesis
感謝男人,對專家的性愛改變評論不錯:O –