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>
        private void GetTreeNodesStatus(TreeNodeCollection nodes)
        {
            foreach (TreeNode node in nodes)
            {
                if (node.IsExpanded)
                {
                    NodesStatus[node.FullPath] = true;
                }
                else
                {
                    NodesStatus.Remove(node.FullPath);
                }
                if (node.IsSelected)
                {
                    SelectNodeFullPath = node.FullPath;
                }
                GetTreeNodesStatus(node.Nodes);
            }
        }

        /// <summary>
        ///
        /// </summary>
        /// <param name="nodes"></param>
        private void SetTreeNodesStatus(TreeNodeCollection nodes)
        {
            foreach (TreeNode node in nodes)
            {
                if (NodesStatus[node.FullPath] != null)
                {
                    node.Expand();
                }
                if (node.FullPath == SelectNodeFullPath)
                {
                    this.tvAuthFuction.SelectedNode = node;
                }
                SetTreeNodesStatus(node.Nodes);
            }
        }
    }

View Code

调用:

然后在给TreeView添加Nodes的前面和后面分别添加上这两个函数,例如TreeView类的实例tv,就可以使用

GetTreeNodesStatus(tv.Nodes);

//更新TreeView函数

SetTreeNodesStatus(tv.Nodes);

这样就能实现TreeView的状态保持了

时间: 2024-09-28 16:05:56

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

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

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

【winform】怎么在form2里的textbox里对form1的treeview节点之进行修改?

问题描述 [winform]怎么在form2里的textbox里对form1的treeview节点之进行修改? form1里有个treeview,现在选中其节点弹出form2的textbox 现在希望在textbox里输入的信息能同步修改该节点内容.并存入数据库中 请问各位高手们这个改怎么弄? 能不能给段代码过来? 解决方案 可以使用自定义事件,也可以传递form对象,通过它去访问它的变量或方法 解决方案二: Form2增加一个属性, TreeNode Node{get;set;} Form1的

Winform怎样让treeview的某个节点不可用,,,

问题描述 c#的Winform怎样让treeview的某个节点不可用,,,selectAction没找到:::: 解决方案 解决方案二:不知道你所谓的不可用,是指什么,看不见,不可编辑,还是什么呢,其实很多操作,完全可以根据你的条件在这个节点被选中的情况下做单独处理,比如它选中时进制编辑,选中其他节点时,放开编辑等

c# winform怎么设置TreeView控件的某个节点为只读

问题描述 TreeView节点设置成了CheckBox类型,我想让某个节点只读,能做到吗? 解决方案 解决方案二:自带的Treeview估计不行吧,你可以尝试自定义Treeview解决方案三:在TreeView的AfterCheck事件进行判断,如果那个节点是希望只读的,设置e.Node.Checked=false;

如何用js控制TreeView全展开和全收缩

问题描述 目的:想实现TreeView全展开和全收缩,我知道TreeView本身有方法ExpandAll和Collapse可以实现,但现在想通过客户端js来实现上述功能.那位大侠能指点一下~:) 解决方案 解决方案二:js调用TreeView_ToggleNode(data,index,node,lineType,children)方法可以展开单个节点,迭代一下,就可以达到目标了解决方案三:大侠,在详细说一下,这个方法的这几个参数,如果能给出完整代码,哈哈,不胜感激+马上给分啊~解决方案四:需求

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

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

TreeView节点问题 ,急啊.谢谢

问题描述 我如何才能让点击有子节点的父节点是展开这个根节点,不光是点击旁边那个展开节点的图标有反应,点文字也有反应--就是我点击文字就展开.注:treeview的内容我是在后台代码加的. 解决方案 解决方案二:<asp:TreeNodeText=""value=""SelectAction="Expand"></asp:TreeNode>红色部分即为点击后展开.解决方案三:引用1楼goandhome的回复: <asp

关于Winform控件TreeView的问题

问题描述 版上的各位大牛帮帮忙哈.我在Winform中使用Treeview,实现它的AfterCheck事件,然后我在界面上点击树(特别是点击快)时有时候会出现某个节点被选中了(其父节点却没有被选中),而且调试的时候发现其Checked属性为false.如下图: 解决方案 解决方案二:不会吧,那你试试beforecheck事件呢?解决方案三:已经解决,是.net的一个bug.参考https://social.msdn.microsoft.com/Forums/windows/en-US/9d71

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

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