Winform 里面的TreeView节点定位的另外一种方法TreeNode.FromHandle

Winform 里面的TreeView是一种常见的、功能强大的控件,一般的使用大家可能都是比较熟悉的了,估计我们大多数做定位节点的时候,一般都是采用循环查找的方法。如下面的方法所示

 foreach (TreeNode node in this.TreeView1.Nodes)
  {
     if (node.Text == "要找的节点名称")
     {
        return node;
     }
      return null;
  }

另外还有一种方法是使用 TreeNode.FromHandle方法来快速定位节点,为了说明如何使用,我们假设有这么一个场景,有一个集团,集团里面有很多公司,每个公司又有一些子公司,

我们需要在每个子公司下面增加一些设备节点或者人员节点。那我们应该如何处理这些节点的显示和定位呢?

首先我们在添加集团这些公司及子公司节点的时候,分别记录这些公司及子公司的树节点信息,放到内存列表中。代码如下所示。

                        TreeView treeView = this.TreeView1;
                        treeView.Nodes.Clear();
                        foreach (string key in groupList.Keys)
                        {
                            TreeNode node = treeView.Nodes.Add(key, key, 0);
                            if (!companyHandleDict.ContainsKey(key))
                            {
                                companyHandleDict.Add(key, node.Handle);
                            }
                        }

                        foreach (string key in groupList.Keys)
                        {
                            foreach (string subKey in groupList[key].Keys)
                            {
                                TreeNode node = TreeNode.FromHandle(treeView, companyHandleDict[key]);
                                if (node != null)
                                {
                                    TreeNode tempNode = node.Nodes.Add(subKey, subKey, 0);
                                    if (!subCompanyHandleDict.ContainsKey(key + subKey))
                                    {
                                        subCompanyHandleDict.Add(key + subKey, tempNode.Handle);
                                    }
                                }
                            }
                        }

 记录了这些TreeNode的Handle之后,我们如果要在这些节点上添加子节点的时候,就可以快速定位了。代码如下所示。

                         foreach (Taxi taxi in taxiDcit.Values)
                        {
                            string key = taxi.MyInfo.Corporation + taxi.MyInfo.Filialy;
                            TreeNode node = TreeNode.FromHandle(treeView, subCompanyHandleDict[key]);
                            if (node != null)
                            {
                                TreeNode subNode = new TreeNode(taxi.MyBrand, 1, 2);
                                subNode.Tag = "vehicle";
                                node.Nodes.Add(subNode);
                            }

    本文转自博客园伍华聪的博客,原文链接:Winform 里面的TreeView节点定位的另外一种方法TreeNode.FromHandle,如需转载请自行联系原博主。

                  

时间: 2024-08-04 05:19:06

Winform 里面的TreeView节点定位的另外一种方法TreeNode.FromHandle的相关文章

TreeView节点定位的另外一种方法TreeNode.FromHandle

Winform 里面的TreeView是一种常见的.功能强大的控件,一般的使用大家可能都是比较熟悉的了,估计我们大多数做定位节点的时候,一般都是采用循环查找的方法.如下面的方法所示 for each (TreeNode node in this.TreeView1.Nodes) { if (node.Text == "要找的节点名称") { return node; } return null; } 另外还有一种方法是使 用TreeNode.FromHandle方法来快速定位节点,为了

艾伟_转载:TreeView节点定位的另外一种方法TreeNode.FromHandle

Winform 里面的TreeView是一种常见的.功能强大的控件,一般的使用大家可能都是比较熟悉的了,估计我们大多数做定位节点的时候,一般都是采用循环查找的方法.如下面的方法所示 foreach (TreeNode node in this.TreeView1.Nodes) {if (node.Text == "要找的节点名称") {return node; }return null; } 另外还有一种方法是使 用TreeNode.FromHandle方法来快速定位节点,为了说明如何

qt编程里面的treeview显示的问题

问题描述 qt编程里面的treeview显示的问题 itemProject->setChild(itemPd->index().row(),1,new QStandardItem(QString(QLatin1String(ret)))); 用这句话添加目录的第二列信息,界面变得不规则,如下图: 用itemProject->setChild(itemPd->index().row(),1,new QStandardItem(QStringLiteral("12"

winform里的treeview能够跟数据绑定吗?我不知道。里面有treeview的用法。是转来的

不过我知道用建立相应的数据库结构,然后用递归的方法可以实现下面是treeview的用法TreeView组件是由多个类来定义的,TreeView组件是由命名空间"System.Windows.Forms"中的"TreeView"类来定义的,而其中的节点(即Node),是由命名空间"System.Windows.Forms"中的"TreeNode"来定义的.所以当在程序中创建一个TreeView对象,其实只是创建了一个可以放置节点

单独控制IE WebControl里面的Treeview的几个动作的Postback

treeview|web|控制 在使用这个TreeView是经常需要将动作PostBack到服务器端来做一些数据操作,如OnExpanded或者SelectIndexChange等.TreeView控件提供了一个AutoPostBack的属性来设置这个TreeView是否需要进行PostBack的动作来让后台操作数据.但是这个属性一旦设成True的话,那么TreeView的所有动作都会PostBack回去将页面刷新,不管是Expaned还是SelectIndexChangek都PostBack回

winform如何保持TreeView节点展开和折叠的状态

转载:http://blog.sina.com.cn/s/blog_6abcacf5010138q5.html private Hashtable NodesStatus = new Hashtable(); private string SelectNodeFullPath = string.Empty; /// <summary> /// /// </summary> /// <param name="nodes"></param>

TreeView节点互斥,autopostback=false的方法

treeview 问题描述:frameset中的TreeView,里面就四个节点,想打开一个后,关闭其它三个节点.开始是在TreeView1_Expand里写,倒也能用,可要设置autopostback为true,刷新时很难看,就在网上找资料相关主题如下:==================1. "展开时不提交,改变选择节点时才提交"2. "使TreeView展开一个节点后自动缩回其他所有的已经展开的节点,就是说同一时间内只有一个展开节点"3. "Tree

把excel表格里的数据导入sql数据库的两种方法_MsSql

本来最近在研究微信公众平台的,老大临时交我个任务,把excel表格里的数据导入sql数据库,我想这so easy嘛. 没想都在上面消磨了两天... 把情况介绍下:在数据库中有如下这样结构的表(A表) 我只取关键的及列里面还有很多数据. 有一张id和name对照的excel文件(B表)和N张结构类似的excel表(C表)(没有id那一列)              我的任务在B表中找到C表中数据对应的id后,然后将id加到C表中,最后根据id是唯一的,用C表的数据去更新A表的数据.这里主要涉及了e

把excel表格里的数据导入sql数据库的两种方法

本来最近在研究微信公众平台的,老大临时交我个任务,把excel表格里的数据导入sql数据库,我想这so easy嘛. 没想都在上面消磨了两天... 把情况介绍下:在数据库中有如下这样结构的表(A表) 我只取关键的及列里面还有很多数据. 有一张id和name对照的excel文件(B表)和N张结构类似的excel表(C表)(没有id那一列) 我的任务在B表中找到C表中数据对应的id后,然后将id加到C表中,最后根据id是唯一的,用C表的数据去更新A表的数据.这里主要涉及了excel表格和数据库表间的