treeview托拽和动态添加节点以及treeview和xml的交互的实现
?????????前兩天被winform的treeview搞暈了,現(xiàn)在終于有時(shí)間了,把自己用到的知識(shí)簡(jiǎn)單的寫出來。供和我一樣初用winform 的treeview的同志批評(píng)指正。
????????一。treeview的托拽的實(shí)現(xiàn)(樹與樹之間的):
??????????? 首先,你要兩棵樹了,以treeview1和treeview2來說。設(shè)置其allowdrop屬性為true。
?????????????? 添加拖拽函數(shù)
????????{
????????????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();?
????????????????}?
????????????}?
????????}
這是實(shí)現(xiàn)拖拽在主要代碼,接下來就是初始化的時(shí)候構(gòu)造幾個(gè)節(jié)點(diǎn),在form的page_load函數(shù)里加入
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);?
????????}
就可以了。
?? 二。動(dòng)態(tài)添加節(jié)點(diǎn)及和XML交互。
?????????? 這個(gè)方法很多,這里就不多介紹,貼出部分代碼,請(qǐng)批評(píng)指正:
????????private?TreeNode?CreateNewNode()
????????{
????????????TreeNode?node?=?new?TreeNode(this.txtTitle.Text.Trim());
????????????node.Tag?=?"";
????????????return?node;
????????}
????????#endregion?
????????從XML中得到數(shù)據(jù)#region?從XML中得到數(shù)據(jù)
????????private?void?GetDataFromXML?()
????????{
????????????//從XML中讀取數(shù)據(jù)到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中寫數(shù)據(jù)#region?向XML中寫數(shù)據(jù)
????????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
?
當(dāng)添加了這些函數(shù),接下來就是調(diào)用的問題了。?? 這些是一些比較笨的方法,并且沒有加異常處理另外考慮在也不全面,希望看到的,有好方法的不吝指教!謝謝!
轉(zhuǎn)載于:https://www.cnblogs.com/wts/archive/2007/03/26/688760.html
總結(jié)
以上是生活随笔為你收集整理的treeview托拽和动态添加节点以及treeview和xml的交互的实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汽车工业过程导向的方法、审核计划和审核过
- 下一篇: 为何我通过 Calendar1.Sele