C# 控件之 TreeView

  • Post author:
  • Post category:其他



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



版权声明:本文为weixin_39354845原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。