给出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