前两天被winform的treeview搞晕了,现在终于有时间了,把自己用到的知识简单的写出来。供和我一样初用winform 的treeview的同志批评指正。
        一。treeview的托拽的实现(树与树之间的):
            首先,你要两棵树了,以treeview1和treeview2来说。设置其allowdrop属性为true。
               添加拖拽函数

private void treeView_ItemDrag(object sender, System.Windows.Forms.ItemDragEventArgs e)
        {
            DoDragDrop(e.Item, DragDropEffects.Move); 
        }

        private void treeView_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
        {
         e.Effect = DragDropEffects.Move;
        }

        private void treeView_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
        {
            TreeNode NewNode; 
            if(e.Data.GetDataPresent("System.Windows.Forms.TreeNode", false)) 
            {
                Point pt = ((TreeView)sender).PointToClient(new Point(e.X, e.Y));
                TreeNode DestinationNode = ((TreeView)sender).GetNodeAt(pt); 
                NewNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode"); 
                if(DestinationNode.TreeView != NewNode.TreeView) 
                {
                    DestinationNode.Nodes.Add((TreeNode) NewNode.Clone());
                    DestinationNode.Expand(); 
                } 
            } 
        }

这是实现拖拽在主要代码,接下来就是初始化的时候构造几个节点,在form的page_load函数里加入

private void my1_Load(object sender, System.EventArgs e)
        {        
            TreeNode ParentNode1; 
            TreeNode ParentNode2; 
            ParentNode1 = treeView1.Nodes.Add("WTS"); 
            ParentNode2.Tag = "";
            ParentNode1.Nodes.Add("WTS1"); 
            ParentNode1.Nodes[0].Tag = "";
            ParentNode1.Nodes.Add("WTS2");    
            ParentNode1.Nodes[1].Tag = "";
            ParentNode1.Expand(); 
            ParentNode2 = treeView2.Nodes.Add("wts");
            ParentNode2.Tag = "";
            ParentNode2.Nodes.Add("wts1"); 
            ParentNode2.Nodes[0].Tag = "";
            ParentNode2.Nodes.Add("wts2"); 
            ParentNode2.Nodes[1].Tag = "";
            ParentNode2.Expand(); 
            this.treeView1.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.treeView_ItemDrag); 
            this.treeView2.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.treeView_ItemDrag); 
            this.treeView1.DragEnter += new System.Windows.Forms.DragEventHandler(this.treeView_DragEnter); 
            this.treeView2.DragEnter += new System.Windows.Forms.DragEventHandler(this.treeView_DragEnter); 
            this.treeView1.DragDrop += new System.Windows.Forms.DragEventHandler(this.treeView_DragDrop); 
            this.treeView2.DragDrop += new System.Windows.Forms.DragEventHandler(this.treeView_DragDrop); 
        }

就可以了。
   二。动态添加节点及和XML交互。
           这个方法很多,这里就不多介绍,贴出部分代码,请批评指正:

创建根节点#region 创建根节点
        private TreeNode CreateNewNode()
        {
            TreeNode node = new TreeNode(this.txtTitle.Text.Trim());
            node.Tag = "";
            return node;
        }
        #endregion 
        从XML中得到数据#region 从XML中得到数据
        private void GetDataFromXML ()
        {
            //从XML中读取数据到TreeView            
            try
            {
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load("Menu.xml");

                XmlNodeList xmlNodes = xmlDoc.DocumentElement.ChildNodes;

                this.treeView1.BeginUpdate();
                this.treeView1.Nodes.Clear();
                XmlNodeToTreeNode(xmlNodes, this.treeView1.Nodes);
                this.treeView1.EndUpdate();
            }
            catch
            {
            }
            
        }
        #endregion 
        向XML中写数据#region 向XML中写数据
        private void InsertDataIntoXML ()
        {
            //将TreeView保存到XML文件中            
            XmlDocument doc = new XmlDocument();
            doc.LoadXml("<Menu></Menu>");
            XmlNode root = doc.DocumentElement;
            doc.InsertBefore(doc.CreateXmlDeclaration("1.0", "utf-8", "yes"), root);
            TreeNodeToXml(this.treeView1.Nodes, root);
            doc.Save("Menu.xml");
        }
        #endregion 
        TreeNodeToXml#region TreeNodeToXml
        private void TreeNodeToXml(TreeNodeCollection treeNodes, XmlNode xmlNode)
        {
            XmlDocument doc = xmlNode.OwnerDocument;
            foreach (TreeNode treeNode in treeNodes)
            {
                XmlNode element = doc.CreateNode("element", "Item", "");
                XmlAttribute attr = doc.CreateAttribute("WTS");
                treeNode.Tag ="";
                attr.Value = treeNode.Text;
                element.Attributes.Append(attr);
                element.AppendChild(doc.CreateCDataSection(treeNode.Tag.ToString()));
                xmlNode.AppendChild(element);

                if (treeNode.Nodes.Count > 0)
                {
                    TreeNodeToXml(treeNode.Nodes, element);
                }
            }
        }
        #endregion 
        XmlNodeToTreeNode#region XmlNodeToTreeNode
        private void XmlNodeToTreeNode(XmlNodeList xmlNode, TreeNodeCollection treeNode)
        {
            foreach (XmlNode var in xmlNode)
            {
                if (var.NodeType != XmlNodeType.Element)
                {
                    continue;
                }
                TreeNode newTreeNode = new TreeNode();
                newTreeNode.Text = var.Attributes["WTS"].Value;            
                if (var.HasChildNodes)
                {
                    if (var.ChildNodes[0].NodeType == XmlNodeType.CDATA)
                    {
                        newTreeNode.Tag = var.ChildNodes[0].Value;
                    }

                    XmlNodeToTreeNode(var.ChildNodes, newTreeNode.Nodes);
                }
                treeNode.Add(newTreeNode);
            }
        }
        #endregion XmlNodeToTreeNode

当添加了这些函数,接下来就是调用的问题了。

这些是一些比较笨的方法,并且没有加异常处理另外考虑在也不全面,希望看到的,有好方法的不吝指教!谢谢!

转载于:https://www.cnblogs.com/wts/archive/2007/03/26/688760.html

treeview托拽和动态添加节点以及treeview和xml的交互的实现相关推荐

  1. Dojo学习13 dijit.Tree 动态添加节点之一

    为什么80%的码农都做不了架构师?>>>    13. dijit.Tree 动态添加节点之一 对dijit.Tree研究了很久,源代码也看了好多遍了.对于fx这个类的研究还需要更深 ...

  2. zTree动态添加节点

    在zTree上面动态添加节点要用到函数: addNodes(parentNode, [index], newNodes, isSilent) 关于这个函数的详细说明如下: 示例代码如下: //1.获取 ...

  3. Ambari动态添加节点

    Ambari添加节点 背景 措施 操作步骤 ambari系列: Ambari 服务器节点动态换盘操作 Ambari的Metrics Collector启动后自动关闭的解决 Ambari动态添加节点 背 ...

  4. Web前端文档阅读笔记-vis.js动态添加节点(vue cli环境)

    这里主要是针对vis的network图进行节点动态添加 图用的是vis.js,表单使用的是element-ui 程序运行截图如下: 添加一个节点: 这里是不需要刷新页面就能添加的. 程序结构如下: 关 ...

  5. 【Kafka】Kafka集群 动态 添加 节点 可行否

    文章目录 1.概述 2.集群 2.1 准备2个节点 2.2 修改配置 2.2.1 node1 配置 2.2.2 node2 配置 2.3 启动zk 2.4 启动node1 2.5 测试 2.6 启动n ...

  6. redis三主三从部署集群以及动态添加节点和删除节点

    redis安装过程: redis6.2.6安装与学习_wtl1992的博客-CSDN博客_redis6安装1.redis在Linux上的安装github地址:Releases · redis/redi ...

  7. java 动态加载控件_JS动态添加节点后渲染为EasyUI控件,EasyUI动态渲染解析解决方案...

    这是个小菜在实际工作中遇到的问题,相信很多EasyUI新手很可能也遇到这样的问题,因此小菜觉得有必要拿出来分享一下. 这个问题要从EasyUI的datebox组件说起,小菜用这个组件的时候,发现用$( ...

  8. antv g6动态添加节点

    前言 : antv 官方API只是提供了一般用法,但是许多实际项目有一些定制需求,往往无法实现. 最近 公司在做图谱项目,需要在展示处节点之后,点击某一个节点,实现动态追加节点, 1.动态追加: gr ...

  9. java树 JTree实例(可动态添加节点)

    import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.tree.*;   class ...

最新文章

  1. P2055 [ZJOI2009]假期的宿舍
  2. js学习笔记9----时间操作
  3. mysql 不同分区 同时insert_Mysql分区表的原理和优缺点
  4. [读书笔记] 史玉柱自述:我的营销心得
  5. Win32项目生成的程序exe图标显示异常的问题
  6. cas内外网同时访问_并发编程高手必知——CAS详解
  7. UnityShader26:运动模糊
  8. Vlc之vs2010版本的配置
  9. LLppdd likes strings
  10. 浅谈暴力破解及验证码安全
  11. 腾讯app看视频看不了显示服务器没有返回,腾讯视频TV版暂停服务怎么办?教你方法!...
  12. arcmap叠置分析_ArcGIS常见的叠加操作分析情况汇总
  13. 使用Python编写简单的端口扫描程序
  14. js实现手机摇一摇以及震动功能
  15. 粒子滤波(particle filtering)梳理
  16. 鸟与虫(四)pexels搜到的我都想要,
  17. Python学习笔记--pytorch--随机梯度下降、神经网络与全连接层
  18. python练习生|这是你熟悉的第一行代码吗?(附python安装教程(win))
  19. STM32F103学习笔记(5)——数码管驱动TM1650使用
  20. 静电容键盘和机械键盘声音对比

热门文章

  1. 在Linux(Ubuntu)下搭建ASP.NET Core环境并运行 继续跨平台
  2. c语言学习之基础知识点介绍(十二):结构体的介绍
  3. mysqld命令查看数据库目录
  4. C语言 使用指针计算两个整数的和与差
  5. 计算机硬件人员专业知识技能,2017年江苏省职业学校技能大赛(计算机硬件)竞赛实施方案...
  6. linux swftools java_linux安装openoffice与SWFtools工具
  7. idea2019中文版
  8. navicate破解失败后删除注册表
  9. 03-spring bean
  10. cola-ui的使用