Makale numarası: 307968 - Son Gözden Geçirme: 21 Temmuz 2008 Pazartesi - Gözden geçirme: 4.0

TreeView için sürükle ve bırak işlevlerini bir Visual C# uygulamasına ekleme hakkında

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.
Bu makalenin Microsoft Visual Basic .NET sürümü için bkz: 307967  (http://support.microsoft.com/kb/307967/ ) .
Bu makalenin Microsoft Visual C++ .NET sürümü için bkz: 815675  (http://support.microsoft.com/kb/815675/ ) .

Bu Sayfada

Hepsini aç | Hepsini kapa

Özet

Bu adım adım makalede, ağaç düğümleri arasında bir Visual C# uygulamasında iki TreeView denetimi ile bir sürükle ve bırak işlemi gerçekleştirmeye açıklamaktadır.

Gereksinimler

Aşağıdaki listede, gereksinim duyacağınız donanım, yazılım, ağ altyapısı ve hizmet paketleri önerilmektedir:
  • Visual C#
Bu makalede, aşağıdaki konularda bilgi sahibi olduğunuz varsayılmaktadır:
  • Windows Forms TreeView denetimi
  • Windows Forms olay işleme

Tekniğin Açıklaması

TreeView denetimini işlemesi gerekir üç Sürükle ve bırak olayları sağlar:
  • ItemDrag: Bu olay, kullanıcı ağaç düğümü sürüklemeye başlar başlamaz TreeView denetimi kaynaktan oluşturulur. Bu durumda, Sürükle ve bırak yordamını başlatmak için DoDragDrop yöntemini çağırın.
  • DragEnter: sürükle ve bırak işlemi başlatan sonra hedef TreeView denetimi DragEnter olayda işlemesi gerekir. Bu olay, kullanıcı kaynak TreeView denetimi nokta hedef TreeView denetimi için sınırları TreeNode nesne sürüklendiğinde gerçekleşir. DragEnter olay hedef sürükleyin işlemi, bu denetim için geçerli olup olmadığını belirlemek için TreeView denetimini etkinleştirir. Bu makaledeki örnek kod, yalnızca taşıma işlemini etkinleştirir.
  • DragDrop: işlemek için son hedef TreeView denetimi DragDrop olay etkinliğidir. Sürüklenmekte TreeNode nesne hedef TreeView denetimi bırakıldı bu olay oluşur. Bu olay işlemek için <a0></a0>, TreeNode nesne almak ve nesneyi hedefe TreeView denetimi ekleyin. Kod örneği, verileri almak için veri nesnesi kullanır.
Bu makaledeki örnek kod bir TreeNode nesnesi TreeView denetimi hedefe sürüklenen güvence altına alır. GetData yöntemi veri nesnesinin kaynak denetiminden Sürüklenmekte düğümü alır. Burada, bu düğüm hedef denetimde bırakılan GetNodeAt yöntemini belirler. Kaynak düğümü, konumunu belirledikten sonra <a0>Hedef</a0> düğümünün alt öğesi olarak ekleyin. Bu örnek, taşıma işlemi yerine getirir çünkü kaynak düğümü özgün TreeView denetimden son adım kaldırmaktır.

Örnek oluşturma adımları

  1. Visual C# ile yeni bir Windows uygulaması oluşturun. Varsayılan olarak, Form1 adlı bir form oluşturulur.
  2. Araç, iki TreeView denetimi Form1'e eklemek için kullanın. Varsayılan olarak, TreeView1 ve TreeView2 oluşturulur.
  3. Sürüklenen bıraktı ve TreeView denetimlere izin vermek için <a0></a0>, doğru Properties penceresinde TreeView1 hem TreeView2AllowDrop'u özelliğini değiştirin.
  4. Form1'ın Load olayı yöntemi işleyicisini oluşturmak için Form1 ' ı çift tıklatın. Add the following code to populate the two TreeView controls with TreeNode objects and to define the event handlers:
    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. <a0>Sürükleyin</a0> operasyonun yönüne bağlı ItemDrag olay TreeView1 veya TreeView2, işlemek için aşağıdaki yöntemi işleyicisi ekleyin. Bu kod, Sürüklenmekte olan maddenin bir taşıma işlemi başlatır.
    private void treeView_ItemDrag(object sender,
    			System.Windows.Forms.ItemDragEventArgs e)
    		{
    			DoDragDrop(e.Item, DragDropEffects.Move);
    		}
  6. <a0>Sürükleyin</a0> operasyonun yönüne bağlı DragEnter olay TreeView1 veya TreeView2, işlemek için aşağıdaki yöntemi işleyicisi ekleyin:
    private void treeView_DragEnter(object sender,
    			System.Windows.Forms.DragEventArgs e)
    		{
    			e.Effect = DragDropEffects.Move;
    		}
  7. Önceki adımda eklediğiniz yöntemi hemen sonra gelen Form1 sınıfa aşağıdaki yöntemi ekleyin:
    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. Oluşturup projeyi çalıştırın. Düğümleri TreeView bir denetimden diğerine sürükleyin. Düğüm kaynak denetiminden kaldırılır ve hedef denetimdeki bir alt düğümü olarak eklenen unutmayın.

NOTLAR

Bu makalede sağlanan örnek yalnızca gösterim amacıyla hazırlanmıştır. Bu nedenle, yalnızca örnek Basitleştirilmiş bir senaryoda TreeView denetimini nasıl göstermektedir. Örnek küçük tutmak için <a0></a0>, çeşitli senaryolarda dikkate alınmaz. Örneğin, kod aynı TreeView denetiminde düğümlerin ile bir sürükle ve bırak işlemi gerçekleştirmenize izin vermez.

Kodu Ayrıca, bir kullanıcı nesneyi hedef TreeView denetimi belirli bir düğümde bırak değil senaryosu işlemez. Bu senaryoyu ele DestinationNode null olup; olup olmadığını sınamak için TreeView denetimini köküne Sürüklenmekte olan nesne eklemek ve böyle devam eder.

Referanslar

Daha fazla bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitelerine bakın:
DragEnter olayı
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.dragenter(VS.71).aspx (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.dragenter(VS.71).aspx)

DragDrop olayı
http://msdn2.microsoft.com/en-us/library/system.windows.forms.control.dragdrop(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/system.windows.forms.control.dragdrop(vs.71).aspx)

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual C# 2008 Express Edition
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 Standard Edition
Anahtar Kelimeler: 
kbmt kbsweptvs2008 kbhowtomaster kbsample KB307968 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:307968  (http://support.microsoft.com/kb/307968/en-us/ )