C# 控件之 TreeView

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 类的新实例。

TreeNode(SerializationInfo, StreamingContext)

使用指定的序列化信息和上下文初始化 TreeNode 类的新实例。

TreeNode(String)

用指定的标签文本初始化 TreeNode 类的新实例。

TreeNode(String, Int32, Int32)

用指定的标签文本以及树节点处于选定和未选定状态时所显示的图像来初始化 TreeNode 类的新实例。

TreeNode(String, Int32, Int32, TreeNode[])

用指定的标签文本、子树节点以及树节点处于选定和未选定状态时所显示的图像来初始化 TreeNode 类的新实例。

TreeNode(String, TreeNode[])

用指定的标签文本和子树节点初始化 TreeNode 类的新实例。

属性

BackColor

获取或设置树节点的背景色。

Bounds

获取树节点的界限。

Checked

获取或设置一个值,用以指示树节点是否处于选中状态。

ContextMenu

获取与此树节点关联的快捷菜单。

ContextMenuStrip

获取或设置与此树节点关联的快捷菜单。

FirstNode

获取树节点集合中的第一个子树节点。

ForeColor

获取或设置树节点的前景色。

FullPath

设置从根树节点到当前树节点的路径。

Handle

获取树节点的句柄。

ImageIndex

获取或设置当树节点处于未选定状态时所显示图像的图像列表索引值。

ImageKey

获取或设置此树节点处于未选中状态时与其关联的图像的键。

Index

获取树节点在树节点集合中的位置。

IsEditing

获取一个值,用以指示树节点是否处于可编辑状态。

IsExpanded

获取一个值,用以指示树节点是否处于可展开状态。

IsSelected

获取一个值,用以指示树节点是否处于选定状态。

IsVisible

获取一个值,用以指示树节点是否是完全可见或部分可见。

LastNode

获取最后一个子树节点。

Level

获取 TreeView 控件中的树视图的深度(从零开始)。

Name

获取或设置树节点的名称。

NextNode

获取下一个同级树节点。

NextVisibleNode

获取下一个可见树节点。

NodeFont

获取或设置用于显示树节点标签文本的字体。

Nodes

获取分配给当前树节点的 TreeNode 对象的集合。

Parent

获取当前树节点的父树节点。

PrevNode

获取上一个同级树节点。

PrevVisibleNode

获取上一个可见树节点。

SelectedImageIndex

获取或设置当树节点处于选定状态时所显示的图像的图像列表索引值。

SelectedImageKey

获取或设置当树节点处于选中状态时显示在该节点中的图像的键。

StateImageIndex

获取或设置图像的索引,该图像用于在父 TreeNode 的 TreeView 属性设置为 false 时,指示 CheckBoxes 的状态。

StateImageKey

获取或设置图像的键,该图像用于在父 TreeNode 的 TreeView 属性设置为 false 时,指示 CheckBoxes 的状态。

Tag

获取或设置包含树节点有关数据的对象。

Text

获取或设置在树节点标签中显示的文本。

ToolTipText

获取或设置当鼠标指针悬停于 TreeNode 之上时显示的文本。

TreeView

获取树节点分配到的父树视图。

方法

BeginEdit()

开始编辑树节点标签。

Clone()

复制树节点和以此树节点为根的整个子树。

Collapse()

折叠树节点。

Collapse(Boolean)

折叠 TreeNode,并可选择折叠其子节点。

CreateObjRef(Type)

创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。

(继承自 MarshalByRefObject)
Deserialize(SerializationInfo, StreamingContext)

从指定的 TreeNode 加载 SerializationInfo 的状态。

EndEdit(Boolean)

终止编辑树节点标签。

EnsureVisible()

确保树节点可见,并在必要时展开树节点和滚动树视图控件。

Equals(Object)

确定指定对象是否等于当前对象。

(继承自 Object)
Expand()

展开树节点。

ExpandAll()

展开所有子树节点。

FromHandle(TreeView, IntPtr)

返回带有指定句柄并分配给指定树视图控件的树节点。

GetHashCode()

作为默认哈希函数。

(继承自 Object)
GetLifetimeService()

检索控制此实例的生存期策略的当前生存期服务对象。

(继承自 MarshalByRefObject)
GetNodeCount(Boolean)

返回子树节点的数目。

GetType()

获取当前实例的 Type

(继承自 Object)
InitializeLifetimeService()

获取生存期服务对象来控制此实例的生存期策略。

(继承自 MarshalByRefObject)
MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
MemberwiseClone(Boolean)

创建当前 MarshalByRefObject 对象的浅表副本。

(继承自 MarshalByRefObject)
Remove()

从树视图控件中移除当前树节点。

Serialize(SerializationInfo, StreamingContext)

将 TreeNode 的状态保存到指定的 SerializationInfo

Toggle()

将树节点切换为展开或折叠状态。

ToString()

返回表示当前对象的字符串。

 

 三、点击事件

 

 在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;
        }
    }
}

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值