C# TreeNode案例详解

目录
  • 添加节点
  • 删除
  • 修改
    • 方法1:
    • 方法二:

添加节点

private void Form1_Load(object sender, EventArgs e)
{
    treeView1.LabelEdit = true;//可编辑状态。  

    //添加一个节点,这个结点是根节点。
    TreeNode node = new TreeNode();
    node.Text = "hope";
    treeView1.Nodes.Add(node);  

    TreeNode node1 = new TreeNode();
    node1.Text = "hopeone";
    TreeNode node11 = new TreeNode();
    node11.Text = "hopeoneone";
    TreeNode node2 = new TreeNode();
    node2.Text = "hopetwo";  

    node1.Nodes.Add(node11);//在node1下面在添加一个结点。  

    node.Nodes.Add(node1);//node下的两个子节点。
    node.Nodes.Add(node2);  

    TreeNode t = new TreeNode("basil");//作为根节点。
    treeView1.Nodes.Add(t);
    TreeNode t1 = new TreeNode("basilone");
    t.Nodes.Add(t1);
    TreeNode t2 = new TreeNode("basiltwo");
    t.Nodes.Add(t2);
}  
private void Form1_Load(object sender, EventArgs e)
        {
            treeView1.LabelEdit = true;//可编辑状态。

            //添加一个节点,这个结点是根节点。
            TreeNode node = new TreeNode();
            node.Text = "hope";
            treeView1.Nodes.Add(node);

            TreeNode node1 = new TreeNode();
            node1.Text = "hopeone";
            TreeNode node11 = new TreeNode();
            node11.Text = "hopeoneone";
            TreeNode node2 = new TreeNode();
            node2.Text = "hopetwo";

            node1.Nodes.Add(node11);//在node1下面在添加一个结点。

            node.Nodes.Add(node1);//node下的两个子节点。
            node.Nodes.Add(node2);

            TreeNode t = new TreeNode("basil");//作为根节点。
            treeView1.Nodes.Add(t);
            TreeNode t1 = new TreeNode("basilone");
            t.Nodes.Add(t1);
            TreeNode t2 = new TreeNode("basiltwo");
            t.Nodes.Add(t2);
        }

删除

private void button1_Click(object sender, EventArgs e)
      {
          //点击该按钮的时候,会移除选中项
          treeView1.Nodes.Remove(treeView1.SelectedNode);
      }
private void button1_Click(object sender, EventArgs e)
        {
            //点击该按钮的时候,会移除选中项
            treeView1.Nodes.Remove(treeView1.SelectedNode);
        }

修改

private void button2_Click(object sender, EventArgs e)
       {
           //点击这个按钮的时候,可以修改选中项
           //注意:在使用这个属性的时候,必须设置treeView1.LabelEdit =true,否则会提示错误。
           treeView1.SelectedNode.BeginEdit();
       }
private void button2_Click(object sender, EventArgs e)
        {
            //点击这个按钮的时候,可以修改选中项
            //注意:在使用这个属性的时候,必须设置treeView1.LabelEdit =true,否则会提示错误。
            treeView1.SelectedNode.BeginEdit();
        }

C#中Treeview判断选择的节点并执行不同的方法

Treeview,点击不同的节点(包括父节点和父节点下的子节点)触发不同的事件,执行相应的方法

方法1:

treeView1_AfterSelect事件就是treeView1中节点被选择触发的事件,e.Node指的是当前选中的节点,e.Node.Nodes指的是当前选中节点的子节点集合。

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
      {
          if (e.Action == TreeViewAction.ByMouse)
          {
              //当前选中的节点有父节点,并且该父节点在相同级别的父节点中排行第一。
              if (e.Node.Parent != null && e.Node.Parent.Index == 0)
              {
                  //当前选中节点在所有的兄弟节点中排第 一
                  if(e.Node.Index==0)
                  {
                       //调用相应的方法();
                  }
              }
              //表示当前节点没有父节点,并且在兄弟节点中排行第五(由零开始索引)
              if(e.Node.Parent==null&&e.Node.Index==4)
              {
             //调用相应的方法();
               }
          }
      }
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            if (e.Action == TreeViewAction.ByMouse)
            {
                //当前选中的节点有父节点,并且该父节点在相同级别的父节点中排行第一。
                if (e.Node.Parent != null && e.Node.Parent.Index == 0)
                {
                    //当前选中节点在所有的兄弟节点中排第 一
                    if(e.Node.Index==0)
                    {
                         //调用相应的方法();
                    }
                }
                //表示当前节点没有父节点,并且在兄弟节点中排行第五(由零开始索引)
                if(e.Node.Parent==null&&e.Node.Index==4)
                {
               //调用相应的方法();
                 }
            }
        }

方法二:

通过节点的Name属性来判断具体是哪个节点被选择,并执行相应的方法(这种方法效率高一些)

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
             if (e.Action == TreeViewAction.ByMouse)
             {
                 //说明当前选中节点没有子节点
                 if(e.Node.Nodes.Count==0)
                 {
                      if(e.Node.name="aaa")
                      {
                           //执行相应的方法();
                      }
                      else if(e.Node.Name="bbb")
                      {
                           //执行相应的方法();
                      }
                 }
            }
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
         {
              if (e.Action == TreeViewAction.ByMouse)
              {
                  //说明当前选中节点没有子节点
                  if(e.Node.Nodes.Count==0)
                  {
                       if(e.Node.name="aaa")
                       {
                            //执行相应的方法();
                       }
                       else if(e.Node.Name="bbb")
                       {
                            //执行相应的方法();
                       }
                  }
             }

C# 怎么判断TreeView选中的是子节点 ?并且是属于哪个父节?

TreeNode selNode = tree.SelectedNode;
if (selNode == null)
{
    //防止空引用
    return;
}
if (selNode.Parent != null)
{
    //为有父亲节点的,
    TreeNode parentNode = selNode.Parent;//得到父亲节点
    if (selNode.Nodes.Count == 0)
    {
        //为没有子节点,即选中的节点为叶子节点
    }
}
TreeNode selNode = tree.SelectedNode;
if (selNode == null)
{
    //防止空引用
    return;
}
if (selNode.Parent != null)
{
    //为有父亲节点的,
    TreeNode parentNode = selNode.Parent;//得到父亲节点
    if (selNode.Nodes.Count == 0)
    {
        //为没有子节点,即选中的节点为叶子节点
    }
}

C#.Net中TreeView控件右键选择节点问题处理

private void treeView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
    if(e.Button==MouseButtons.Right)
    {
        TreeNode tn=treeView1.GetNodeAt(e.X,e.Y);
        if(tn!=null)treeView1.SelectedNode = tn;
    }
} 
private void treeView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
    if(e.Button==MouseButtons.Right)
    {
        TreeNode tn=treeView1.GetNodeAt(e.X,e.Y);
        if(tn!=null)treeView1.SelectedNode = tn;
    }
}

treeView默认 展开

treeView1.ExpandAll();

默认选中TreeVIew中的一个节点

//先找到你要设置选中的节点
TreeNode tn = treeView1.Nodes[3];
//把要设置的节点给SelectedNode
this.treeView1.SelectedNode = tn;
//this.TreeView1.SelectedNodeIndex="";

TreeView,左键单击节点时可修改节点名称

TreeView本身可支持左键修改名称
在初始化时设置:
TreeView.LabelEdit = true;
这样应用程序的treeview生成以后就支持单击节点修改。
如果不想左键修改,可在treeView1_MouseDown中设置treeView1.LabelEdit = false;
右键菜单 重命名
treeView1.LabelEdit = true;
treeView.SelectedNode.BeginEdit();

TreeVIew清空

TreeView.Nodes.Clear()

到此这篇关于C# TreeNode案例详解的文章就介绍到这了,更多相关C# TreeNode使用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 关于antd tree 和父子组件之间的传值问题(react 总结)

    项目需求:点击产品树节点时获取该节点的所有父节点,同时回填表格的搜索条件,完成搜索功能,搜索结果展示在下方的table中. 写了三个组件: 现在有个业务场景交互:在orderTree组件中点击树节点,获取当前节点以及所有的父节点的Id 放入一个对象arrKeys中,并在orderForm组件中使用(回填类型下拉选择框,objId对象作为查询接口的入参) 现在可以分部解决问题: 1.首先获取点击的树节点以及所有父节点的id ---arrKeys 2.在点击树节点获取当前节点以及所有父级节点之后,通

  • JDK集合源码之解析TreeMap(一)

    目录 简介 继承体系 存储结构 源码解析 属性 Entry内部类 构造方法 get(Object key)方法 特性再回顾 左旋 右旋 插入元素 插入再平衡 插入元素举例 总结 简介 TreeMap使用红黑树存储元素,可以保证元素按key值的大小进行遍历. 继承体系 TreeMap实现了Map.SortedMap.NavigableMap.Cloneable.Serializable等接口. SortedMap规定了元素可以按key的大小来遍历,它定义了一些返回部分map的方法. public

  • C++实现KDTree 附完整代码

    目录 简介 举例 分割的作用 一维 二维 n维 关于kdtree的重要问题 一.树的建立 关键代码 简介   k-d树(k-dimensional),是一种分割k维数据空间的数据结构(对数据点在k维空间中划分的一种数据结构),主要应用于多维空间关键数据的搜索(如:范围搜索和最近邻搜索). kdTree概念 kd-tree或者k维树是计算机科学中使用的一种数据结构,用来组织表示k维空间中点的集合.它是一种带有其他约束条件的二分查找树.Kd-tree对于区间和近邻搜索十分有用.一般位于三维空间中的邻

  • JDK集合源码之解析TreeMap(二)

    目录 删除元素 删除再平衡 删除元素举例 二叉树的遍历 TreeMap的遍历 总结 总结 删除元素 删除元素本身比较简单,就是采用二叉树的删除规则. 如果删除的位置有两个叶子节点,则从其右子树中取最小的元素放到删除的位置,然后把删除位置移到替代元素的位置,进入下一步. 如果删除的位置只有一个叶子节点(有可能是经过第一步转换后的删除位置),则把那个叶子节点作为替代元素,放到删除的位置,然后把这个叶子节点删除. 如果删除的位置没有叶子节点,则直接把这个删除位置的元素删除即可. 针对红黑树,如果删除位

  • 面试必问项之Set实现类:TreeSet

    目录 一.TreeSet 概述 二.TreeSet 结构 1.TreeSet 声明 2.TreeSet 类继承结构 3.红黑树 三.TreeSet 创建 1.构造器 2.通过 Comparator 实例创建 TreeSet 四.TreeSet 方法 五.NavigableSet接口介绍 六.TreeSet 与 比较器 1.自然排序 2.定制排序 七.案例 1.自定义类的自然排序 2.自定义类的定制排序 总结 一.TreeSet 概述 1.TreeSet是 SortedSet 接口的实现类, Tr

  • el-tree文字显示不全的解决办法

    目录 方法一: 最简单的设置横向滚动条 方法二(新): 添加拖拽条改变外层容器宽度 方法二(老): 添加拖拽条改变外层容器宽度 方法三: 通过...表示 鼠标移上去显示全称 使用element ui的树组件el-tree时,经常出现如下问题: el-tree渲染时因为文字内容长度不一致,导致过长的文字无法显示完全. 经尝试发现如下三种解决方法,推荐方法三. 方法一: 最简单的设置横向滚动条 效果: 在当前树节点的span标签上设置样式 overflow: auto; // 或者 overflow

  • 解析ConcurrentHashMap: 红黑树的代理类(TreeBin)

    前一章是get.remove方法分析,喜欢的朋友点击查看.本篇为ConcurrentHashMap源码系列的最后一篇,来分析一下TreeBin 红黑树代理节点的源码: 1.TreeBin内部类分析 TreeBin是红黑树的代理,对红黑树不太了解的,可以参考: static final class TreeBin<K,V> extends Node<K,V> { // 红黑树根节点 TreeNode<K,V> root; // 链表的头节点 volatile TreeNo

  • Element树形控件整合带图标的下拉菜单(tree+dropdown+input)

    目录 需求说明: 实现步骤: 本文主要讲述:自定义树形控件<el-tree> 需求说明: Element UI 官网提供的树形控件包含基础的.可选择的.自定义节点内容的.带节点过滤的以及可拖拽节点的树形结构 如下: 我想要的效果是支持搜索效果的树,将鼠标悬浮后显示添加修改图标,点击图标后弹出对应页面:并且在每个文件夹前添加自定义图标. 实现效果: 实现步骤: 1.使用插槽(slot) <el-col :span="4" :xs="24"> &

  • C# TreeNode案例详解

    目录 添加节点 删除 修改 方法1: 方法二: 添加节点 private void Form1_Load(object sender, EventArgs e) { treeView1.LabelEdit = true;//可编辑状态. //添加一个节点,这个结点是根节点. TreeNode node = new TreeNode(); node.Text = "hope"; treeView1.Nodes.Add(node); TreeNode node1 = new TreeNod

  • Java list与set中contains()方法效率案例详解

    list.contains(o) :遍历集合所有元素,用每个元素和传入的元素进行 equals 比较,如果集合元素有 n 个,则会比较 n 次,所以时间复杂度为 O(n) .方法源码如下: // ArrayList 中的方法 public boolean contains(Object o) { return indexOf(o) >= 0; } public int indexOf(Object o) { if (o == null) { for (int i = 0; i < size;

  • AngularJS日程表案例详解

    功能:添加事件/完成事件/删除事件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> *{ margin: 0; padding: 0; } .note{ margin:0 auto; background: orange; color: ora

  • BootStrap的JS插件之轮播效果案例详解

    Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的. 案例 下面展示的就是此插件和相关组件制作的轮播案例. <div id="carousel-example-generic" class="carousel slide" data-ride="carousel"> <!-- Indicators --> <ol class

  • Vue 过渡(动画)transition组件案例详解

    Vue过度(动画),本质走的是CSS3:transtion,animation. 控制器div显示/隐藏,代码如下: <div id="box"> <input type="button" value="按钮" @click="toggle"> <div id="div1" v-show="isShow"></div> </div&g

  • vue.js+boostrap项目实践(案例详解)

    一.为什么要写这篇文章 最近忙里偷闲学了一下vue.js,同时也复习了一下boostrap,发现这两种东西如果同时运用到一起,可以发挥很强大的作用,boostrap优雅的样式和丰富的组件使得页面开发变得更美观和更容易,同时vue.js又是可以绑定model和view(这个相当于MVC中的,M和V之间的关系),使得对数据变换的操作变得更加的简易,简化了很多的逻辑代码. 二.学习这篇文章需要具备的知识 1.需要有vue.js的知识 2.需要有一定的HTML.CSS.JavaScript的基础知识 3

  • Apache 文件上传与文件下载案例详解

    写一个Apache文件上传与文件下载的案例:以供今后学习 web.xml配置如下: <span style="font-family:SimSun;font-size:14px;"><?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns=&

  • jQuery 跨域访问解决原理案例详解

    浏览器端跨域访问一直是个问题,多数研发人员对待js的态度都是好了伤疤忘了疼,所以病发的时候,时不时地都要疼上一疼.记得很久以前使用iframe 加script domain 声明.yahoo js util 的方式解决二级域名跨域访问的问题. 时间过得好快,又被拉回js战场时, 跨域问题这个伤疤又开疼了.好在,有jQuery帮忙,跨域问题似乎没那么难缠了.这次也借此机会对跨域问题来给刨根问底,结合实际的开发项目,查阅了相关资料,算是解决了跨域问题...有必要记下来备忘, 跨域的安全限制都是指浏览

  • Android开发之对话框案例详解(五种对话框)

    下面通过实例代码给大家分享5种android对话框,具体内容详情如下所示: 1 弹出普通对话框 --- 系统更新 2 自定义对话框-- 用户登录 3 时间选择对话框 -- 时间对话框 4 进度条对话框 -- 信息加载.. 5 popuWindow对话框 1 弹出普通对话框 --- 系统更新  //弹出普通对话框 public void showNormalDialog(View v) { AlertDialog.Builder builder = new Builder(this); //设置D

  • MongoDB模糊查询操作案例详解(类关系型数据库的 like 和 not like)

    1.作用与语法描述 作用: 正则表达式是使用指定字符串来描述.匹配一系列符合某个句法规则的字符串.许多程序设计语言都支持利用正则表达式进行字符串操作.MongoDB 使用 $regex 操作符来设置匹配字符串的正则表达式. 语法一 { <field>: { $regex: /pattern/, $options: '<options>' } } { <field>: { $regex: 'pattern', $options: '<options>' } }

随机推荐