treeview托拽和动态添加节点以及treeview和xml的交互的实现
前两天被winform的treeview搞晕了,现在终于有时间了,把自己用到的知识简单的写出来。供和我一样初用winform 的treeview的同志批评指正。
一。treeview的托拽的实现(树与树之间的):
首先,你要两棵树了,以treeview1和treeview2来说。设置其allowdrop属性为true。
添加拖拽函数
{
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函数里加入
{
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交互。
这个方法很多,这里就不多介绍,贴出部分代码,请批评指正:
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的交互的实现相关推荐
- Dojo学习13 dijit.Tree 动态添加节点之一
为什么80%的码农都做不了架构师?>>> 13. dijit.Tree 动态添加节点之一 对dijit.Tree研究了很久,源代码也看了好多遍了.对于fx这个类的研究还需要更深 ...
- zTree动态添加节点
在zTree上面动态添加节点要用到函数: addNodes(parentNode, [index], newNodes, isSilent) 关于这个函数的详细说明如下: 示例代码如下: //1.获取 ...
- Ambari动态添加节点
Ambari添加节点 背景 措施 操作步骤 ambari系列: Ambari 服务器节点动态换盘操作 Ambari的Metrics Collector启动后自动关闭的解决 Ambari动态添加节点 背 ...
- Web前端文档阅读笔记-vis.js动态添加节点(vue cli环境)
这里主要是针对vis的network图进行节点动态添加 图用的是vis.js,表单使用的是element-ui 程序运行截图如下: 添加一个节点: 这里是不需要刷新页面就能添加的. 程序结构如下: 关 ...
- 【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 ...
- redis三主三从部署集群以及动态添加节点和删除节点
redis安装过程: redis6.2.6安装与学习_wtl1992的博客-CSDN博客_redis6安装1.redis在Linux上的安装github地址:Releases · redis/redi ...
- java 动态加载控件_JS动态添加节点后渲染为EasyUI控件,EasyUI动态渲染解析解决方案...
这是个小菜在实际工作中遇到的问题,相信很多EasyUI新手很可能也遇到这样的问题,因此小菜觉得有必要拿出来分享一下. 这个问题要从EasyUI的datebox组件说起,小菜用这个组件的时候,发现用$( ...
- antv g6动态添加节点
前言 : antv 官方API只是提供了一般用法,但是许多实际项目有一些定制需求,往往无法实现. 最近 公司在做图谱项目,需要在展示处节点之后,点击某一个节点,实现动态追加节点, 1.动态追加: gr ...
- java树 JTree实例(可动态添加节点)
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.tree.*; class ...
最新文章
- P2055 [ZJOI2009]假期的宿舍
- js学习笔记9----时间操作
- mysql 不同分区 同时insert_Mysql分区表的原理和优缺点
- [读书笔记] 史玉柱自述:我的营销心得
- Win32项目生成的程序exe图标显示异常的问题
- cas内外网同时访问_并发编程高手必知——CAS详解
- UnityShader26:运动模糊
- Vlc之vs2010版本的配置
- LLppdd likes strings
- 浅谈暴力破解及验证码安全
- 腾讯app看视频看不了显示服务器没有返回,腾讯视频TV版暂停服务怎么办?教你方法!...
- arcmap叠置分析_ArcGIS常见的叠加操作分析情况汇总
- 使用Python编写简单的端口扫描程序
- js实现手机摇一摇以及震动功能
- 粒子滤波(particle filtering)梳理
- 鸟与虫(四)pexels搜到的我都想要,
- Python学习笔记--pytorch--随机梯度下降、神经网络与全连接层
- python练习生|这是你熟悉的第一行代码吗?(附python安装教程(win))
- STM32F103学习笔记(5)——数码管驱动TM1650使用
- 静电容键盘和机械键盘声音对比
热门文章
- 在Linux(Ubuntu)下搭建ASP.NET Core环境并运行 继续跨平台
- c语言学习之基础知识点介绍(十二):结构体的介绍
- mysqld命令查看数据库目录
- C语言 使用指针计算两个整数的和与差
- 计算机硬件人员专业知识技能,2017年江苏省职业学校技能大赛(计算机硬件)竞赛实施方案...
- linux swftools java_linux安装openoffice与SWFtools工具
- idea2019中文版
- navicate破解失败后删除注册表
- 03-spring bean
- cola-ui的使用