C# 树形图(TreeView)控件的使用 – 陆陆无为而治者 – 博客园
一、简介
treeview 是非常重要的控件,树形结构常用的功能如下
1、增、删
2、事件点击
3、层级结构
二、TreeView 的基本用法
1、添加根节点
private void AddRootBtn_Click(object sender, EventArgs e)
{
if(string.IsNullOrEmpty(textBox1.Text.Trim()))
{
MessageBox.Show("这个节点的名字不能为空");
return;
}
// 开始添加root 节点
treeView1.Nodes.Add(textBox1.Text.Trim());
textBox1.Text = "";
treeView1.Show();
}
2、添加子节点
/// <summary>
/// 增加子节点 ,先判断有没有父节点,
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void AddChildBtn_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBox1.Text.Trim()))
{
MessageBox.Show("这个节点的名字不能为空");
return;
}
// 判断 选择的父节点是不是选中了
if(treeView1.SelectedNode==null)
{
MessageBox.Show("请选择要添加的节点在那个父点下!");
return;
}
else
{
treeView1.SelectedNode.Nodes.Add(textBox1.Text.Trim());
textBox1.Text = "";
treeView1.Show();
}
}
3、删除选中的节点,下面的例子是极其简单的
/// <summary>
/// 删除其中的选择的节点
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DelChoosedBtn_Click(object sender, EventArgs e)
{
// 先看节点是不是已经被选中了
if (treeView1.SelectedNode == null)
{
MessageBox.Show("请选择要删除的节点!");
return;
}
else
{
treeView1.SelectedNode.Remove();
}
}
4、树形图 添加图标
构造函数
TreeNode() |
初始化 |
TreeNode(SerializationInfo, StreamingContext) |
使用指定的序列化信息和上下文初始化 |
TreeNode(String) |
用指定的标签文本初始化 |
TreeNode(String, Int32, Int32) |
用指定的标签文本以及树节点处于选定和未选定状态时所显示的图像来初始化 |
TreeNode(String, Int32, Int32, TreeNode[]) |
用指定的标签文本、子树节点以及树节点处于选定和未选定状态时所显示的图像来初始化 |
TreeNode(String, TreeNode[]) |
用指定的标签文本和子树节点初始化 |
属性
BackColor |
获取或设置树节点的背景色。 |
Bounds |
获取树节点的界限。 |
Checked |
获取或设置一个值,用以指示树节点是否处于选中状态。 |
ContextMenu |
获取与此树节点关联的快捷菜单。 |
ContextMenuStrip |
获取或设置与此树节点关联的快捷菜单。 |
FirstNode |
获取树节点集合中的第一个子树节点。 |
ForeColor |
获取或设置树节点的前景色。 |
FullPath |
设置从根树节点到当前树节点的路径。 |
Handle |
获取树节点的句柄。 |
ImageIndex |
获取或设置当树节点处于未选定状态时所显示图像的图像列表索引值。 |
ImageKey |
获取或设置此树节点处于未选中状态时与其关联的图像的键。 |
Index |
获取树节点在树节点集合中的位置。 |
IsEditing |
获取一个值,用以指示树节点是否处于可编辑状态。 |
IsExpanded |
获取一个值,用以指示树节点是否处于可展开状态。 |
IsSelected |
获取一个值,用以指示树节点是否处于选定状态。 |
IsVisible |
获取一个值,用以指示树节点是否是完全可见或部分可见。 |
LastNode |
获取最后一个子树节点。 |
Level |
获取 |
Name |
获取或设置树节点的名称。 |
NextNode |
获取下一个同级树节点。 |
NextVisibleNode |
获取下一个可见树节点。 |
NodeFont |
获取或设置用于显示树节点标签文本的字体。 |
Nodes |
获取分配给当前树节点的 |
Parent |
获取当前树节点的父树节点。 |
PrevNode |
获取上一个同级树节点。 |
PrevVisibleNode |
获取上一个可见树节点。 |
SelectedImageIndex |
获取或设置当树节点处于选定状态时所显示的图像的图像列表索引值。 |
SelectedImageKey |
获取或设置当树节点处于选中状态时显示在该节点中的图像的键。 |
StateImageIndex |
获取或设置图像的索引,该图像用于在父 |
StateImageKey |
获取或设置图像的键,该图像用于在父 |
Tag |
获取或设置包含树节点有关数据的对象。 |
Text |
获取或设置在树节点标签中显示的文本。 |
ToolTipText |
获取或设置当鼠标指针悬停于 |
TreeView |
获取树节点分配到的父树视图。 |
方法
三、点击事件
在treeview 中添加一个treeView1_MouseDown 的事件
//
private void treeView1_MouseDown(object sender, MouseEventArgs e)
{
if(e.Button==MouseButtons.Right)
{
MessageBox.Show("鼠标右击了");
}
}
// 绑定添加的实践
private void treeView1_MouseDown(object sender, MouseEventArgs e)
{
// 判断是不是右击了
if(e.Button==MouseButtons.Right)
{
Point clickPoint=new Point(e.X, e.Y);
int x = e.X;
int y = e.Y;
// 获得选择的Node,通过点击点的位置来过得
TreeNode currTreeNode = treeView1.GetNodeAt(clickPoint);
if (currTreeNode is TreeNode) // 判断当前的是不是一个节点
{
// 如果是 ,则 添加
treeView1.SelectedNode = currTreeNode;
// 就是这一步将 右击事件练习起来的
currTreeNode.ContextMenuStrip = this.contextMenuStrip1;
contextMenuStrip1.Show(MousePosition);
}
}
}
四、代码:
From1 :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TreeView控件
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 添加根节点
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void AddRootBtn_Click(object sender, EventArgs e)
{
if(string.IsNullOrEmpty(textBox1.Text.Trim()))
{
MessageBox.Show("这个节点的名字不能为空");
return;
}
// 开始添加root 节点
treeView1.Nodes.Add(textBox1.Text.Trim());
textBox1.Text = "";
treeView1.Show();
}
/// <summary>
/// 增加子节点 ,先判断有没有父节点,
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void AddChildBtn_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBox1.Text.Trim()))
{
MessageBox.Show("这个节点的名字不能为空");
return;
}
// 判断 选择的父节点是不是选中了
if(treeView1.SelectedNode==null)
{
MessageBox.Show("请选择要添加的节点在那个父点下!");
return;
}
else
{
treeView1.SelectedNode.Nodes.Add(textBox1.Text.Trim());
textBox1.Text = "";
treeView1.Show();
}
}
/// <summary>
/// 删除其中的选择的节点
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DelChoosedBtn_Click(object sender, EventArgs e)
{
// 先看节点是不是已经被选中了
if (treeView1.SelectedNode == null)
{
MessageBox.Show("请选择要删除的节点!");
return;
}
else
{
treeView1.SelectedNode.Remove();
}
}
private void loadTreeView()
{
for (int i = 0; i < 5; i++)
{
TreeNode treeNode_1 = new TreeNode(); //添加根节点
treeNode_1.Text = "根节点" + i;
treeView1.Nodes.Add(treeNode_1);
//添加子节点
for (int j = 0; j < 5; j++) //添加二级节点
{
TreeNode treeNode_2 = new TreeNode();
treeNode_2.Text = i + ":二级节点" + j;
treeNode_1.Nodes.Add(treeNode_2);
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
loadTreeView();
}
// 通过 treeview的右击来添加子节点
private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
FormAdd f5 = new FormAdd();
if (f5.ShowDialog() == DialogResult.OK)
{
treeView1.SelectedNode.Nodes.Add(f5.nodeName);
}
}
// 通过 treeview的右击删除所有的节点
private void toolStripMenuItem2_Click(object sender, EventArgs e)
{
treeView1.SelectedNode.Remove();
}
// 绑定添加的实践
private void treeView1_MouseDown(object sender, MouseEventArgs e)
{
// 判断是不是右击了
if(e.Button==MouseButtons.Right)
{
Point clickPoint=new Point(e.X, e.Y);
int x = e.X;
int y = e.Y;
// 获得选择的Node,通过点击点的位置来过得
TreeNode currTreeNode = treeView1.GetNodeAt(clickPoint);
if (currTreeNode is TreeNode) // 判断当前的是不是一个节点
{
// 如果是 ,则 添加
treeView1.SelectedNode = currTreeNode;
// 就是这一步将 右击事件练习起来的
currTreeNode.ContextMenuStrip = this.contextMenuStrip1;
contextMenuStrip1.Show(MousePosition);
}
}
}
}
}
F2:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TreeView控件
{
public partial class FormAdd : Form
{
public FormAdd()
{
InitializeComponent();
}
// 提供一个get 方法
public string nodeName
{
get { return textBox1.Text.Trim(); }
}
private void btnCancel_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
}
private void btnConfirm_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBox1.Text.Trim()))
{
MessageBox.Show("请填写节点名称!");
return;
}
DialogResult = DialogResult.OK;
}
}
}