2011-02-18 9 views

答えて

6

ListViewは自然にドラッグ&ドロップをサポートしていませんが、コードの小さなビットでそれを有効にすることができます。

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

が、具体的ListViewからドラッグ&ドロップを行う例ですTreeViewに(それはエキスパートセックス変更リンクですので、ほんの数秒待ってから、あなたが答えを見つけることができます下にスクロール):

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

更新:リンクからコード:

  • リストビューとツリービューを作成します。 (私の例では、リストビューは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イベントを作成し、既存のノード(!あなたはすでにあなたのツリービューまたは例の少なくとも1つのノードが失敗していることを確認してください)

に選択(およびドラッグ)リストビューの項目が追加されます

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 –

関連する問題