1
我有兩個listview [listView1,listLocal],他們是本地PC和遠程PC的兩個文件瀏覽器。如果我將項目拖放到同一個列表視圖中,我應該複製/移動。 否則,如果我將物品放入其他列表視圖,則應發送/接收。ListView拖放,如何檢查是否將該項目放在同一列表視圖中?
所以讓listLocal是本地PC的文件瀏覽器,listView1是遠程PC。
所以我需要的是一個條件,檢查是否將拖動的項目拖放到其他列表視圖中。
private void listLocal_ItemDrag(object sender, ItemDragEventArgs e)
{
if (_currAddress == null) return; //if the current address is My Computer
_DraggedItems.Clear();
foreach (ListViewItem item in listLocal.SelectedItems)
{
_DraggedItems.Add((ListViewItem)item.Clone());
}
// if (some condition) call the same listview **listLocal.DoDragDrop**
listLocal.DoDragDrop(e.Item, DragDropEffects.All);
// else call the other listview
listView1.DoDragDrop(e.Item, DragDropEffects.All);
}
也當的DragDrop發射一個ListView我需要我條件檢查,如果拖曳的項目來自同一個列表視圖或沒有。
private void listView1_DragDrop(object sender, DragEventArgs e)
{
Point p = listView1.PointToClient(MousePosition);
ListViewItem targetItem = listView1.GetItemAt(p.X, p.Y);
// if (some condition)
//here i need to check if the dragged item came from the same listview or not
{
if (targetItem == null)
{
PreSend(currAddress); //send to the current address
}
else
{
PreSend(targetItem.ToolTipText); //send to the target folder
}
return;
}
//otherwise
if (targetItem == null) { return; } //if dropped in the same folder return
if ((e.Effect & DragDropEffects.Move) == DragDropEffects.Move)
{
Thread thMove = new Thread(unused => PasteFromMove(targetItem.ToolTipText, DraggedItems));
thMove.Start();
}
else
{
Thread thCopy = new Thread(unused => PasteFromCopy(targetItem.ToolTipText, DraggedItems));
thCopy.Start();
}
}
是否有任何問題,如果我使用DragOver而不是DragEnter,因爲在DragEnter中我不能使用控制按鈕更改e.Effect。如果你知道我的意思 – 2012-04-29 21:58:16
我不知道,但是DragOver有助於做點擊測試來選擇放置某物的確切位置。就像一個只有少量項目和大量空白的ListView。您可以使用ListView.HitTest()來查找光標所在的位置。使用其PointToClient()方法將DragOver中傳遞的屏幕座標的光標座標映射到控制座標。 – 2012-04-29 22:03:41
酷我使用PointToClient突出顯示一個文件夾(項目)之前丟棄項目,它工作時,我DragDrop在同一個列表視圖,但是當我從另一個列表視圖,突出顯示不起作用,我使用'item.Selected = true'突出顯示,我用'listView.Focus'和'listView.Select'仍然不工作。你有什麼主意嗎? – 2012-04-30 01:34:59