【WinForm】TreeView使用,添加节点,拖拽(以年级,班级,学生为例)
先看看效果
首选是界面的布局
为了避免添加层级的混乱,先规定好层级的关系
- 不能在年级层级添加班级和学生
- 不能在班级层级添加年级和学生
- 等等
treeView1.SelectedNode.Level 表示树视图的深度
我们可以以此来区分层级关系
- 年级 树视图的深度为0
- 班级 树视图的深度为1
- 学生 树视图的深度为2
添加年级
TreeNode treeNode = new TreeNode(textBox1.Text);
treeView1.Nodes.Add(treeNode);
添加班级
- 如果选择的节点是年级,则在下级添加
- 如果选择的节点是班级,则在同级添加
- 添加学生亦是如此
if (treeView1.SelectedNode == null) return;
TreeNode treeNode = new TreeNode(textBox2.Text);
if (treeView1.SelectedNode.Level == 0)
{
treeView1.SelectedNode.Nodes.Add(treeNode);
}
else if(treeView1.SelectedNode.Level == 1)
{
treeView1.SelectedNode.Parent.Nodes.Add(treeNode);
}
添加学生
if (treeView1.SelectedNode == null) return;
TreeNode treeNode = new TreeNode(textBox3.Text);
if (treeView1.SelectedNode.Level == 1)
{
treeView1.SelectedNode.Nodes.Add(treeNode);
}
else if(treeView1.SelectedNode.Level == 2)
{
treeView1.SelectedNode.Parent.Nodes.Add(treeNode);
}
修改节点
设置treeView1的LabelEdit为True
选择节点后,在点击一次即可修改
删除节点,删除年级,班级,学生都一样
if (treeView1.SelectedNode == null) return;
treeView1.SelectedNode.Remove();
节点拖拽
学生在班级之间的拖拽,班级在年级之间的拖拽(比如升学)
private void treeView1_ItemDrag(object sender, ItemDragEventArgs e)
{
DoDragDrop(e.Item, DragDropEffects.Move);//开始拖放操作
}
private void treeView1_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}
private void treeView1_DragDrop(object sender, DragEventArgs e)
{
TreeNode drayNode = null;//拖拽的对象
if (e.Data.GetDataPresent(typeof(TreeNode)))
drayNode = (TreeNode)(e.Data.GetData(typeof(TreeNode)));
Point point = treeView1.PointToClient(new Point(e.X, e.Y));//目标节点位置
TreeNode targetTreeNode = treeView1.GetNodeAt(point);//目标节点
//目标节点不为空,目标节点不属于本身
if (targetTreeNode != null && targetTreeNode != drayNode)
{
if (drayNode.Level == targetTreeNode.Level)//拖到同级,如学生拖到学生
{
TreeNode tempNode = drayNode;
drayNode.Remove();
targetTreeNode.Parent.Nodes.Add(tempNode);
}
else if (drayNode.Level == targetTreeNode.Level + 1)//拖到上级,如学生拖到班级
{
TreeNode tempNode = drayNode;
drayNode.Remove();
targetTreeNode.Nodes.Add(tempNode);
}
}
}
把小明从一年(1)班,拖到二年(1)班
把一年(1)班的所有人升为二年(4)班