ListView拖拽至TreeView,TreeView自身拖拽+查询节点
1
using System;
2
using System.Collections.Generic;
3
using System.ComponentModel;
4
using System.Data;
5
using System.Drawing;
6
using System.Text;
7
using System.Windows.Forms;
8
using System.Collections;
9![]()
10
namespace TreeDrag
11
{
12
public partial class Form1 : Form
13
{
14
private Point Position = new Point(0, 0);
15
public Form1()
16
{
17
InitializeComponent();
18
this.treeView1.ExpandAll();
19
}
20![]()
21
private void Form1_Load(object sender, EventArgs e)
22
{
23
this.listView1.AllowDrop = true;
24
this.treeView1.AllowDrop = true;
25
ListViewItem listViewItem1 = new ListViewItem("Item01");
26
ListViewItem listViewItem2 = new ListViewItem("Item02");
27
listView1.Items.Add(listViewItem1);
28
listView1.Items.Add(listViewItem2);
29
}
30![]()
31
private void listView1_ItemDrag(object sender, ItemDragEventArgs e)
32
{
33
//判断是否是鼠标右键按动
34
if (e.Button == MouseButtons.Right)
35
return;
36
int nTotalSelected = listView1.SelectedIndices.Count;
37
//判断组件中是否存在项目
38
if (nTotalSelected <= 0)
39
return;
40
IEnumerator selCol = listView1.SelectedItems.GetEnumerator();
41
selCol.MoveNext();
42
ListViewItem lvi = (ListViewItem)selCol.Current;
43
string mDir = "";
44
for (int i = 0; i < lvi.SubItems.Count; i++)
45
mDir += lvi.SubItems[i].Text + " ,";
46
string str = mDir.Substring(0, mDir.Length - 1);
47
if (str == "")
48
return;
49
//对组件中的字符串开始拖放操作
50
listView1.DoDragDrop(str, DragDropEffects.Copy | DragDropEffects.Move);
51![]()
52
}
53![]()
54
private void treeView1_DragEnter(object sender, DragEventArgs e)
55
{
56
if (e.Data.GetDataPresent("System.String"))
57
{
58
e.Effect = DragDropEffects.Copy;
59
}
60
else if (e.Data.GetDataPresent("System.Windows.Forms.TreeNode"))
61
{
62
e.Effect = DragDropEffects.Move;
63
}
64
else
65
{
66
e.Effect = DragDropEffects.None;
67
}
68![]()
69
}
70![]()
71
private void treeView1_DragDrop(object sender, DragEventArgs e)
72
{
73
//获得拖放中的节点
74
TreeNode moveNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");
75
string s = (string)e.Data.GetData("System.String");
76
if (s != null)
77
{
78
s = s.Substring(s.IndexOf(":") + 1).Trim();
79
}
80
//根据鼠标坐标确定要移动到的目标节点
81
Point pt;
82
TreeNode targeNode;
83
pt = ((TreeView)(sender)).PointToClient(new Point(e.X,e.Y));
84
targeNode = treeView1.GetNodeAt(pt);
85![]()
86
//如果目标节点无子节点则添加为同级节点,反之添加到下级节点的未端
87
if (targeNode.Nodes.Count == 0)
88
{
89
if (moveNode != null)
90
{
91
targeNode.Parent.Nodes.Insert(targeNode.Index, (TreeNode)moveNode.Clone());
92
}
93
else
94
{
95
TreeNode DragNode = new TreeNode(s);
96
targeNode.Nodes.Insert(targeNode.Index + 1, DragNode);
97
}
98
}
99
else
100
{
101
targeNode.Nodes.Insert(targeNode.Nodes .Count, (TreeNode)moveNode.Clone());
102
}
103
//展开目标节点,便于显示拖放效果
104
targeNode.Expand();
105![]()
106
//移除拖放的节点
107
moveNode.Remove();
108![]()
109![]()
110
}
111![]()
112
private void treeView1_ItemDrag(object sender, ItemDragEventArgs e)
113
{
114
if (e.Button == MouseButtons .Left )
115
{
116
DoDragDrop(e.Item, DragDropEffects.Move);
117
}
118
}
119![]()
120
private void listView1_DragDrop(object sender, DragEventArgs e)
121
{
122
string dummy = "temp";
123
//获得进行"Drag"操作中拖动的字符串
124
string s = (string)e.Data.GetData(dummy.GetType());
125
s = s.Substring(s.IndexOf(":") + 1).Trim();
126
Position.X = e.X;
127
Position.Y = e.Y;
128
Position = listView1.PointToClient(Position);
129
//在目标组件中加入以此字符串为标题的项目
130
listView1.Items.Add(new ListViewItem(s, 0));
131
}
132![]()
133
134![]()
135
private void button6_Click(object sender, EventArgs e)
136
{
137
foreach (TreeNode node in this.treeView1.Nodes)
138
{
139
ClearNode(node);
140
FindNode(node, this.textBox1.Text);
141
}
142
}
143
public TreeNode FindNode(TreeNode tnParent, string strValue)
144
{
145![]()
146
if (tnParent == null) return null;
147![]()
148
for (int i = 0; i < tnParent.Text.Length - strValue.Length + 1; i++)
149
{
150
if (tnParent.Text.Substring(i, strValue.Length) == strValue && (!tnParent.Checked))
151
{
152
tnParent.BackColor = Color.Yellow;
153
}
154
}
155
TreeNode tnRet = null;
156![]()
157
foreach (TreeNode tn in tnParent.Nodes)
158
{
159![]()
160
tnRet = FindNode(tn, strValue);
161![]()
162
if (tnRet != null)
163
tnRet.BackColor = Color.Yellow;
164![]()
165
}
166
return tnRet;
167![]()
168![]()
169
}
170![]()
171
public TreeNode ClearNode(TreeNode tnParent)
172
{
173![]()
174
if (tnParent == null) return null;
175
tnParent.BackColor = Color.Empty;
176
TreeNode tnRet = null;
177
foreach (TreeNode tn in tnParent.Nodes)
178
{
179
tnRet = ClearNode(tn);
180
if (tnRet != null)
181
tnRet.BackColor = Color.Empty;
182
}
183
return tnRet;
184
}
185
}
186
}
187![]()
using System;2
using System.Collections.Generic;3
using System.ComponentModel;4
using System.Data;5
using System.Drawing;6
using System.Text;7
using System.Windows.Forms;8
using System.Collections;9

10
namespace TreeDrag11
{12
public partial class Form1 : Form13
{14
private Point Position = new Point(0, 0);15
public Form1()16
{17
InitializeComponent();18
this.treeView1.ExpandAll();19
}20

21
private void Form1_Load(object sender, EventArgs e)22
{23
this.listView1.AllowDrop = true;24
this.treeView1.AllowDrop = true;25
ListViewItem listViewItem1 = new ListViewItem("Item01");26
ListViewItem listViewItem2 = new ListViewItem("Item02");27
listView1.Items.Add(listViewItem1);28
listView1.Items.Add(listViewItem2); 29
}30

31
private void listView1_ItemDrag(object sender, ItemDragEventArgs e)32
{33
//判断是否是鼠标右键按动34
if (e.Button == MouseButtons.Right)35
return;36
int nTotalSelected = listView1.SelectedIndices.Count;37
//判断组件中是否存在项目38
if (nTotalSelected <= 0)39
return;40
IEnumerator selCol = listView1.SelectedItems.GetEnumerator();41
selCol.MoveNext();42
ListViewItem lvi = (ListViewItem)selCol.Current;43
string mDir = "";44
for (int i = 0; i < lvi.SubItems.Count; i++)45
mDir += lvi.SubItems[i].Text + " ,";46
string str = mDir.Substring(0, mDir.Length - 1);47
if (str == "")48
return;49
//对组件中的字符串开始拖放操作50
listView1.DoDragDrop(str, DragDropEffects.Copy | DragDropEffects.Move);51

52
}53

54
private void treeView1_DragEnter(object sender, DragEventArgs e)55
{56
if (e.Data.GetDataPresent("System.String"))57
{58
e.Effect = DragDropEffects.Copy;59
}60
else if (e.Data.GetDataPresent("System.Windows.Forms.TreeNode"))61
{62
e.Effect = DragDropEffects.Move;63
}64
else65
{66
e.Effect = DragDropEffects.None;67
}68

69
}70

71
private void treeView1_DragDrop(object sender, DragEventArgs e)72
{ 73
//获得拖放中的节点74
TreeNode moveNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");75
string s = (string)e.Data.GetData("System.String");76
if (s != null)77
{78
s = s.Substring(s.IndexOf(":") + 1).Trim();79
}80
//根据鼠标坐标确定要移动到的目标节点81
Point pt;82
TreeNode targeNode;83
pt = ((TreeView)(sender)).PointToClient(new Point(e.X,e.Y));84
targeNode = treeView1.GetNodeAt(pt);85

86
//如果目标节点无子节点则添加为同级节点,反之添加到下级节点的未端87
if (targeNode.Nodes.Count == 0)88
{89
if (moveNode != null)90
{91
targeNode.Parent.Nodes.Insert(targeNode.Index, (TreeNode)moveNode.Clone());92
}93
else94
{95
TreeNode DragNode = new TreeNode(s);96
targeNode.Nodes.Insert(targeNode.Index + 1, DragNode);97
}98
}99
else100
{101
targeNode.Nodes.Insert(targeNode.Nodes .Count, (TreeNode)moveNode.Clone());102
}103
//展开目标节点,便于显示拖放效果104
targeNode.Expand();105

106
//移除拖放的节点107
moveNode.Remove();108

109

110
} 111

112
private void treeView1_ItemDrag(object sender, ItemDragEventArgs e)113
{114
if (e.Button == MouseButtons .Left )115
{116
DoDragDrop(e.Item, DragDropEffects.Move);117
}118
}119

120
private void listView1_DragDrop(object sender, DragEventArgs e)121
{122
string dummy = "temp";123
//获得进行"Drag"操作中拖动的字符串124
string s = (string)e.Data.GetData(dummy.GetType());125
s = s.Substring(s.IndexOf(":") + 1).Trim();126
Position.X = e.X;127
Position.Y = e.Y;128
Position = listView1.PointToClient(Position);129
//在目标组件中加入以此字符串为标题的项目130
listView1.Items.Add(new ListViewItem(s, 0));131
}132

133
134

135
private void button6_Click(object sender, EventArgs e)136
{137
foreach (TreeNode node in this.treeView1.Nodes)138
{139
ClearNode(node);140
FindNode(node, this.textBox1.Text);141
} 142
}143
public TreeNode FindNode(TreeNode tnParent, string strValue)144
{145

146
if (tnParent == null) return null;147

148
for (int i = 0; i < tnParent.Text.Length - strValue.Length + 1; i++)149
{150
if (tnParent.Text.Substring(i, strValue.Length) == strValue && (!tnParent.Checked))151
{152
tnParent.BackColor = Color.Yellow;153
}154
}155
TreeNode tnRet = null;156

157
foreach (TreeNode tn in tnParent.Nodes)158
{159

160
tnRet = FindNode(tn, strValue);161

162
if (tnRet != null)163
tnRet.BackColor = Color.Yellow;164

165
}166
return tnRet;167

168

169
}170

171
public TreeNode ClearNode(TreeNode tnParent)172
{173

174
if (tnParent == null) return null;175
tnParent.BackColor = Color.Empty;176
TreeNode tnRet = null;177
foreach (TreeNode tn in tnParent.Nodes)178
{179
tnRet = ClearNode(tn);180
if (tnRet != null)181
tnRet.BackColor = Color.Empty;182
}183
return tnRet;184
} 185
}186
}187




浙公网安备 33010602011771号