dotnet-snippets.de
Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1410 | Anzahl registrierter User: 1443 | Besucher online: 909
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Partner von Codezone.de


Member of Microsoft Community Leader/Insider Program (CLIP)

TreeView Drag&Drop


Autor: Günther Foidl
Sprache: C#
Bewertung: 8,56
(2 Bewertungen)

Anzahl der Aufrufe: 5652
  
Kick it on dotnet-kicks.de  

Beschreibung:

Das folgende Beispiel zeigt wie Knoten im TreeView per Drag&Drop ähnlich wie im Windows-Explorer verschoben/kopiert werden können. Beim Ziehen wird zwischen linken und rechter Maus unterschieden.

Abgelegt unter: Treeview, Drag, Drop, kopieren, verschieben.



C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
using System;
using System.Drawing;
using System.Windows.Forms;

namespace TreeView_DragDrop
{
	public partial class Form1 : Form
	{
		private bool _dragdropCopy = false;
		private DragEventArgs _dragEventArgs;
		private MouseButtons _mouseButton;
		//---------------------------------------------------------------------
		#region Form-Events
		public Form1()
		{
			InitializeComponent();
		}
		//---------------------------------------------------------------------
		private void Form1_Load(object sender, EventArgs e)
		{
			treeView1.ExpandAll();
		}
		#endregion
		//---------------------------------------------------------------------
		/// <summary>
		/// Beginnt den DragDrop-Vorgang
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void treeView1_ItemDrag(object sender, ItemDragEventArgs e)
		{
			// Zu verschiebenden Knoten wählen:
			TreeNode sourceNode = (TreeNode)e.Item;

			_mouseButton = e.Button;

			// DragDrop beginnen:
			DoDragDrop(
				sourceNode,
				DragDropEffects.Move | DragDropEffects.Copy);
		}
		//---------------------------------------------------------------------
		/// <summary>
		/// Validiert ob der DragDrop-Vorgang zugelassen wird
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void treeView1_DragEnter(object sender, DragEventArgs e)
		{
			// Nur TreeNodes werden zugelassen:
			if (e.Data.GetDataPresent(typeof(TreeNode)))
			{
				// Strg-Taste gedrück? Prüfung über Bitmaske:
				if ((e.KeyState & 8) == 8)
					e.Effect = DragDropEffects.Copy;
				// nur linke Maustaste
				else
					e.Effect = DragDropEffects.Move;
			}
			else
				e.Effect = DragDropEffects.None;
		}
		//---------------------------------------------------------------------
		/// <summary>
		/// Verschiebt den Knoten
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void treeView1_DragDrop(object sender, DragEventArgs e)
		{
			_dragEventArgs = e;

			// Behandlung von Verschieben oder Kopieren:
			if (_mouseButton == MouseButtons.Right)
			{
				ctxDragDropKopieren.Visible =
					((e.AllowedEffect & DragDropEffects.Copy) == DragDropEffects.Copy);
				ctxDragDropVerschieben.Visible =
					((e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move);
				ctxDragDrop.Show(e.X, e.Y);
			}
			else
			{
				_dragdropCopy = (e.Effect == DragDropEffects.Copy);
				TreeViewDragDropVerarbeiten();
			}
		}
		//---------------------------------------------------------------------
		private void ctxDragDropKopieren_Click(object sender, EventArgs e)
		{
			_dragdropCopy = true;
			TreeViewDragDropVerarbeiten();
		}
		//---------------------------------------------------------------------
		private void ctxDragDropVerschieben_Click(object sender, EventArgs e)
		{
			_dragdropCopy = false;
			TreeViewDragDropVerarbeiten();
		}
		//---------------------------------------------------------------------
		private void TreeViewDragDropVerarbeiten()
		{
			TreeNode sourceNode =
				_dragEventArgs.Data.GetData(typeof(TreeNode)) as TreeNode;

			// Knoten ermitteln dem der gedragte Knoten hinzugefügt werden 
			// soll:
			Point p = treeView1.PointToClient(new Point(
				_dragEventArgs.X,
				_dragEventArgs.Y));
			TreeNode targetNode = treeView1.GetNodeAt(p);

			if (targetNode != null)
			{
				TreeNode newNode = (TreeNode)sourceNode.Clone();

				// Hinzufügen des neuen Knotens:
				targetNode.Nodes.Add(newNode);

				// Verschieben oder Kopieren?
				if (!_dragdropCopy)				// Verschieben
					sourceNode.Remove();

				// Neuzeichnen des TreeView:
				treeView1.Invalidate();
				treeView1.ExpandAll();
			}
		}
	}
}
Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)



schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.