给出3段代码,分别是TreeView2XML、XML2TreeView和TreeView2MenuStrip。


一、TreeView2XML

     

#region TreeView 2 XML
        private void btnSave_Click(object sender, EventArgs e)
         {
             //将TreeView保存到XML文件中
             if (this.dlgSave.ShowDialog() == DialogResult.OK)
             {
                 XmlDocument doc = new XmlDocument();
                 doc.LoadXml("<Menu></Menu>");
                 XmlNode root = doc.DocumentElement;
                 doc.InsertBefore(doc.CreateXmlDeclaration("1.0", "utf-8", "yes"), root);
                 TreeNode2Xml(this.treeView1.Nodes, root);
                 doc.Save(dlgSave.FileName);
             }
         }        private void TreeNode2Xml(TreeNodeCollection treeNodes, XmlNode xmlNode)
         {
             XmlDocument doc = xmlNode.OwnerDocument;
             foreach (TreeNode treeNode in treeNodes)
             {
                 XmlNode element = doc.CreateNode("element", "Item", "");
                 XmlAttribute attr = doc.CreateAttribute("Title");
                 attr.Value = treeNode.Text;
                 element.Attributes.Append(attr);
                 element.AppendChild(doc.CreateCDataSection(treeNode.Tag.ToString()));
                 xmlNode.AppendChild(element);                if (treeNode.Nodes.Count > 0)
                 {
                     TreeNode2Xml(treeNode.Nodes, element);
                 }
             }
         }
         #endregion

二、XML 2TreeView

   

#region XML 2 TreeView
         private void btnLoad_Click(object sender, EventArgs e)
         {
             //从XML中读取数据到TreeView
             if (this.dlgOpen.ShowDialog() == DialogResult.OK)
             {
                 XmlDocument xmlDoc = new XmlDocument();
                 xmlDoc.Load(dlgOpen.FileName);                XmlNodeList xmlNodes = xmlDoc.DocumentElement.ChildNodes;
                this.treeView1.BeginUpdate();
                 this.treeView1.Nodes.Clear();
                 XmlNode2TreeNode(xmlNodes, this.treeView1.Nodes);
                 this.treeView1.EndUpdate();
             }
         }        private void XmlNode2TreeNode(XmlNodeList xmlNode, TreeNodeCollection treeNode)
         {
             foreach (XmlNode var in xmlNode)
             {
                 if (var.NodeType != XmlNodeType.Element)
                 {
                     continue;
                 }
                 TreeNode newTreeNode = new TreeNode();
                 newTreeNode.Text = var.Attributes["Title"].Value;                if (var.HasChildNodes)
                 {
                     if (var.ChildNodes[0].NodeType == XmlNodeType.CDATA)
                     {
                         newTreeNode.Tag = var.ChildNodes[0].Value;
                     }                    XmlNode2TreeNode(var.ChildNodes, newTreeNode.Nodes);
                 }
                 treeNode.Add(newTreeNode);
             }
         }
         #endregion

三、TreeView 2 Menu

     

#region TreeView 2 Menu
         private void btnRecreateMenu_Click(object sender, EventArgs e)
         {
             //根据TreeView生成层次结构的菜单
             this.contextMenuStrip1.Items.Clear();
             TreeView2Menu(this.treeView1.Nodes, this.contextMenuStrip1.Items);
         }        private void TreeView2Menu(TreeNodeCollection nodes, ToolStripItemCollection items)
         {
             foreach (TreeNode node in nodes)
             {
                 ToolStripMenuItem menu = new ToolStripMenuItem();
                 menu.Text = node.Text;
                 menu.Tag = node.Tag;
                 items.Add(menu);
                 if (node.Nodes.Count > 0)
                 {
                     TreeView2Menu(node.Nodes, menu.DropDownItems);
                 }
                 else
                 {
                     menu.Click += new EventHandler(menu_Click);
                 }
             }
         }
         #endregion