0

小さなファイルエクスプローラーアプリケーション[WINFORMS]があり、ListViewControlを使用してアイテムを探索しています。
したがって、listViewには、現在のアドレス[ローカルコンピューターから]のファイルとフォルダーが表示されます。
ファイル/フォルダを同じアドレスの別のフォルダに簡単に移動/コピーできるようにするには、ドラッグアンドドロップ機能を有効にする必要があります。各アイテムにはいくつかの特性があります。

  • (item.Text / item.Name) にはファイル/フォルダーがあります。
  • item.ToolTipText にはファイル/フォルダーのパスがあります。
  • item.SubItems [1]。ファイルのテキストはファイルサイズを表し、"13.45 MB"フォルダの場合はstring.Empty [ただし、ファイルかフォルダかを知る方法はいくつかあります]になります。

    リストビューでドラッグアンドドロップを使用する方法について多くのチュートリアルを見てきましたが、Windowsファイルエクスプローラーからリストビューへ、またはリストビューから別のリストビューへのようなものでしたが、私の場合、同じリストビューでドラッグアンドドロップする方法を知る必要があります。

    ListViewのAllowDropプロパティを有効にしました。また、次の機能をアクティブにしました。

        private void listView1_DragDrop(object sender, DragEventArgs e)
        {
        }
    
        private void listView1_DragEnter(object sender, DragEventArgs e)
        {
        }
    
        private void listView1_ItemDrag(object sender, ItemDragEventArgs e)
        {
        }
    

    ここに画像の説明を入力してください

    アップデート:

    私はこれを使おうとしました:

    private void listView1_DragDrop(object sender, DragEventArgs e)
        {
            ListViewItem item = (ListViewItem)e.Data.GetData(typeof(ListViewItem)); //this should be the target item (FOLDER)
            StringBuilder s = new StringBuilder();
            foreach (ListViewItem i in listView1.SelectedItems)
            {
                s.AppendLine(i.Text);
            }
            MessageBox.Show("DRAGGED ITEM : " + s.ToString() + "TARGET ITEM : " + item.Text);
        }
        private void listView1_DragEnter(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.Copy;
        }
        private void listView1_MouseDown(object sender, MouseEventArgs e)
        {
            var item = listView1.GetItemAt(e.X, e.Y);
            if (item != null)
            {
                listView1.DoDragDrop(item, DragDropEffects.Copy);
            }
        }
    

    マウスが指すアイテムを取得しlistView1_MouseDownましたが、ドラッグしたアイテムをドロップする前にアイテムが表示されるため、「SWImg」という名前のフォルダーを「ODDFiles」フォルダーにドラッグすると、messageBoxに次のように表示されます。"SWImg - SWImg"

    それから私はに置き換えlistView1_MouseDownましたlistView1_ItemDrag

    private void listView1_ItemDrag(object sender, ItemDragEventArgs e)
        {
            if (e.Item != null)
            {
                listView1.DoDragDrop(e.Item, DragDropEffects.Copy);
            }
        }
    

    同じ結果:S。

  • 4

    1 に答える 1

    0

    私はそれを理解しました。

    private void listView1_DragDrop(object sender, DragEventArgs e)
        {
            if (listView1.SelectedItems.Count == 0) { return; }
            Point p = listView1.PointToClient(MousePosition);
            ListViewItem item = listView1.GetItemAt(p.X, p.Y);
            if (item == null) { return; }
            List<ListViewItem> collection = new List<ListViewItem>();
            foreach (ListViewItem i in listView1.SelectedItems)
            {
                collection.Add((ListViewItem)i.Clone());
            }
            if ((e.Effect & DragDropEffects.Move) == DragDropEffects.Move)
            {
                Thread thMove = new Thread(unused => PasteFromMove(item.ToolTipText, collection));
                thMove.Start();
            }
            else
            {
                Thread thCopy = new Thread(unused => PasteFromCopy(item.ToolTipText, collection));
                thCopy.Start();
            }
    
        }
    
        private void listView1_DragOver(object sender, DragEventArgs e)
        {
            if ((e.KeyState & 8) == 8)
                e.Effect = DragDropEffects.Copy;
            else
                e.Effect = DragDropEffects.Move;
        }
    
        private void listView1_ItemDrag(object sender, ItemDragEventArgs e)
        {
            listView1.DoDragDrop(e.Item,DragDropEffects.All);
        }
    
    于 2012-04-19T15:00:30.053 に答える