ID Artikel: 307968 - Kajian Terakhir: 24 September 2011 - Revisi: 2.0

Bagaimana cara menambahkan fungsionalitas drag-and-drop TreeView dalam aplikasi Visual C#

Tips SistemThis article applies to a different operating system than the one you are using. Article content that may not be relevant to you is disabled.
Untuk Microsoft Visual Basic.NET versi artikel ini, lihat 307967  (http://support.microsoft.com/kb/307967/ ) .
Untuk Microsoft Visual C++.NET versi artikel ini, lihat 815675  (http://support.microsoft.com/kb/815675/ ) .

Pada Halaman ini

Perbesar semua | Perkecil semua

RINGKASAN

Artikel ini selangkah demi selangkah menjelaskan cara menjalankan operasi drag-and-drop dengan node pohon antara dua TreeView kontrol Visual C# aplikasi.

Persyaratan

Daftar berikut menguraikan fitur perangkat keras, perangkat lunak, jaringan infrastruktur, dan paket layanan yang Anda butuhkan:
  • Visual C#
Artikel ini mengasumsikan bahwa Anda sudah familiar dengan topik-topik berikut:
  • Windows Forms TreeView kontrol
  • Penanganan event Windows Forms

Deskripsi teknik

The TreeView kontrol menyediakan tiga drag-and-drop peristiwa yang Anda harus menangani:
  • ItemDrag: Acara ini dibesarkan dari sumber TreeView kontrol ketika user menjalankan menyeret node pohon. Ketika ini terjadi, hubungi DoDragDrop metode untuk memulai prosedur drag-and-drop.
  • DragEnter: Setelah Anda memulai operasi drag dan drop, Anda harus menangani DragEnter acara di tujuan TreeView kontrol. Peristiwa ini terjadi ketika pengguna menyeret TreeNode objek dari sumber TreeView mengendalikan ke titik dalam batas-batas tujuan TreeView kontrol. The DragEnter acara memungkinkan tujuan TreeView kontrol untuk menentukan apakah operasi drag berlaku untuk kontrol ini. Kode contoh dalam artikel ini memungkinkan hanya bergerak operasi.
  • DragDrop: Acara terakhir untuk menangani ini DragDrop acara tujuan TreeView kontrol. Peristiwa ini terjadi ketika TreeNode objek yang diseret telah dijatuhkan pada tujuan TreeView kontrol. Untuk menangani acara ini, mengambil TreeNode objek, dan menambahkan objek ke tujuan TreeView kontrol. Contoh kode menggunakan Data objek untuk mengambil data.
Kode contoh dalam artikel ini menjamin bahwa TreeNode objek telah menyeret ke tujuan TreeView kontrol. The GetData metode Data objek mengambil node yang diseret dari kontrol sumber. The GetNodeAt metode menentukan di mana node ini dijatuhkan di kontrol tujuan. Setelah Anda menentukan posisi, menambahkan sumber node sebagai anak node tujuan. Karena contoh ini melakukan operasi langkah, langkah terakhir adalah untuk menghapus node sumber dari asli TreeView kontrol.

Langkah-langkah untuk membuat sampel

  1. Membuat aplikasi Windows baru dalam Visual C#. Secara default, suatu bentuk yang dinamakan Form1 dibuat.
  2. Penggunaan peralatan untuk menambahkan dua TreeView kontrol untuk Form1. Secara default, TreeView1 dan TreeView2 diciptakan.
  3. Agar TreeView kontrol untuk menyeret dan menjatuhkan, mengubah AllowDrop properti kedua TreeView1 dan TreeView2 untuk Benar dalam jendela properti.
  4. Klik dua kali Form1 untuk menghasilkan metode penangan untuk Form1's Load acara. Tambahkan kode berikut untuk mengisi dua TreeView kontrol dengan TreeNode objek dan mendefinisikan event handler:
    private void Form1_Load(object sender, System.EventArgs e)
    		{
    			TreeNode ParentNode1;
    			TreeNode ParentNode2;
    
    			ParentNode1 = treeView1.Nodes.Add("tv1");
    			ParentNode1.Nodes.Add("tv1FirstChild");
    			ParentNode1.Nodes.Add("tv1SecondChild");
    			ParentNode1.Nodes.Add("tv1ThirdChild");
    			ParentNode1.Nodes.Add("tv1FourthChild");
    			ParentNode1.Expand();
    
    			ParentNode2 = treeView2.Nodes.Add("tv2");
    			ParentNode2.Nodes.Add("tv2FirstChild");
    			ParentNode2.Nodes.Add("tv2SecondChild");
    			ParentNode2.Expand();
    			this.treeView1.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.treeView_ItemDrag);
    			this.treeView2.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.treeView_ItemDrag);
    			this.treeView1.DragEnter += new System.Windows.Forms.DragEventHandler(this.treeView_DragEnter);
    			this.treeView2.DragEnter += new System.Windows.Forms.DragEventHandler(this.treeView_DragEnter);
    			this.treeView1.DragDrop += new System.Windows.Forms.DragEventHandler(this.treeView_DragDrop);
    			this.treeView2.DragDrop += new System.Windows.Forms.DragEventHandler(this.treeView_DragDrop);	
    		}
  5. Tambahkan penangan metode berikut untuk menangani ItemDrag acara baik TreeView1 atau TreeView2, tergantung pada arah operasi drag. Kode ini memulai operasi bergerak pada item yang sedang diseret.
    private void treeView_ItemDrag(object sender,
    			System.Windows.Forms.ItemDragEventArgs e)
    		{
    			DoDragDrop(e.Item, DragDropEffects.Move);
    		}
  6. Tambahkan penangan metode berikut untuk menangani DragEnter peristiwa TreeView1 atau TreeView2, tergantung pada arah operasi drag:
    private void treeView_DragEnter(object sender,
    			System.Windows.Forms.DragEventArgs e)
    		{
    			e.Effect = DragDropEffects.Move;
    		}
  7. Menambahkan metode berikut kelas Form1 sehingga segera mengikuti metode yang ditambahkan pada langkah sebelumnya:
    private void treeView_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
    		{
    			TreeNode NewNode;
    
    			if(e.Data.GetDataPresent("System.Windows.Forms.TreeNode", false))
    			{
    				Point pt = ((TreeView)sender).PointToClient(new Point(e.X, e.Y));
    				TreeNode DestinationNode = ((TreeView)sender).GetNodeAt(pt);
    				NewNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");
    				if(DestinationNode.TreeView != NewNode.TreeView)
    				{     
    					DestinationNode.Nodes.Add((TreeNode) NewNode.Clone());
    					DestinationNode.Expand();
    					//Remove Original Node
    					NewNode.Remove();
    				}
    			}
    		}
  8. Membangun dan menjalankan proyek. Tarik node dari salah satu TreeView kontrol ke yang lain. Perhatikan bahwa node dihapus dari kontrol sumber dan ditambahkan sebagai anak simpul di kontrol tujuan.

Catatan

Sampel yang tersedia di dalam artikel ini ditujukan untuk keperluan demonstrasi hanya. Oleh karena itu, sampel hanya menggambarkan bagaimana menggunakan TreeView kontrol dalam skenario yang disederhanakan. Untuk menjaga sampel kecil, beberapa skenario tidak dianggap. Sebagai contoh, kode tidak membiarkan Anda melakukan operasi drag-and-drop dengan node yang sama TreeView kontrol.

Kode juga tidak menangani skenario di mana pengguna tidak drop objek pada node tertentu di tujuan TreeView kontrol. Untuk menangani skenario ini, menguji apakah DestinationNode nol; Jika, Anda dapat menambahkan objek yang sedang diseret ke akar TreeView kontrol, dan seterusnya.

REFERENSI

Untuk informasi lebih lanjut, lihat berikut Microsoft Developer Network (MSDN) Situs web:
Peristiwa DragEnter
.aspx http://MSDN.Microsoft.com/en-us/library/System.Windows.Forms.Control.dragenter (VS.71) (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.dragenter(VS.71).aspx)

DragDrop acara
.aspx http://msdn2.Microsoft.com/en-us/library/System.Windows.Forms.Control.DragDrop (vs.71) (http://msdn2.microsoft.com/en-us/library/system.windows.forms.control.dragdrop(vs.71).aspx)

Berlaku bagi:
  • Microsoft Visual C# 2008 Express Edition
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 Standard Edition
Kata kunci: 
kbsweptvs2008 kbhowtomaster kbsample kbmt KB307968 KbMtid
Penerjemahan MesinPenerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:307968  (http://support.microsoft.com/kb/307968/en-us/ )