这是一个winform的treeview可以建立用户组和在用户组中建立用户,并使用xml保存数据,下面是相关代码,太多了,看不懂能不能给写一下注释越详细越好,另外前面的勾选框能不能告诉下怎么去掉。
下面是主界面的代码DBView.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.IO;
using System.Collections;
using TreeView;
namespace GlassProcess
{
public partial class DbView : Form
{
string filepath;
string menufilepath;
string proname;
public string unit;
public string user;
public string company;
private bool tmpBool;
XmlOperator xml;
bool haveUser = false;
public DbView( )
{
filepath = Application.StartupPath;
menufilepath = filepath + "\\Menu.xml";
xml = new XmlOperator(filepath, "Menu.xml");
InitializeComponent();
}
private void DbView_Load(object sender, EventArgs e)
{
LoadFormXml();
}
//载入数据 生成列表
private void LoadFormXml()
{
XmlNodeList xmlNodes = xml.GetXmlNodeList();
this.treeView1.BeginUpdate();
this.treeView1.Nodes.Clear();
XmlNode2TreeNode(xmlNodes, this.treeView1.Nodes);
this.treeView1.EndUpdate();
ExpandRoot(this.treeView1.Nodes);
}
//展开节点
private void ExpandRoot(TreeNodeCollection treeNodes)
{
foreach (TreeNode treeNode in treeNodes)
{
if (treeNode.Tag.ToString().Equals("root"))
{
treeNode.Expand();
}
else if (treeNode.Tag.ToString().Equals("area"))
{
treeNode.Collapse();
}
if (treeNode.Nodes.Count > 0)
{
ExpandRoot(treeNode.Nodes);
}
}
}
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;
if (newTreeNode.Tag.ToString().Equals("root"))
{
newTreeNode.ImageIndex = 0;
newTreeNode.SelectedImageIndex = 0;
newTreeNode.Expand();
}
else if (newTreeNode.Tag.ToString().Equals("area"))
{
newTreeNode.ImageIndex = 1;
newTreeNode.SelectedImageIndex = 1;
}
else
{
newTreeNode.ImageIndex = 2;
newTreeNode.SelectedImageIndex = 2;
}
}
XmlNode2TreeNode(var.ChildNodes, newTreeNode.Nodes);
}
treeNode.Add(newTreeNode);
}
}
private void treeView1_MouseUp(object sender, MouseEventArgs e)
{
try
{
Point mpt = new Point(e.X, e.Y);
TreeNode TreeClickNode = this.treeView1.GetNodeAt(mpt);
this.treeView1.SelectedNode = TreeClickNode;
proname = TreeClickNode.Text;
if (TreeClickNode != null)
{
CreatMenu(TreeClickNode.Tag.ToString());
if (e.Button == MouseButtons.Right)
{
this.contextMenuStrip.Show(this.treeView1, mpt);
//this.treeView1.ContextMenu.Show(treeView1,mpt);
}
}
else
{
contextMenuStrip.Items.Clear();
}
}
catch
{
}
}
private void CreatMenu(string p)
{
switch (p)
{
case "root":
{
this.contextMenuStrip.Items.Clear();
ToolStripMenuItem AddArea = new ToolStripMenuItem();
AddArea.Name = "新增用户分区";
AddArea.Text = "新增用户分区";
AddArea.Click += new System.EventHandler(AddArea_Click);
contextMenuStrip.Items.AddRange(
new System.Windows.Forms.ToolStripItem[] {
AddArea
}
);
}
break;
case "area":
{
this.contextMenuStrip.Items.Clear();
ToolStripMenuItem AddUser = new ToolStripMenuItem();
AddUser.Name = "添加用户";
AddUser.Text = "添加用户";
AddUser.Image = this.treeImgs.Images[3];
AddUser.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText;
AddUser.Click += new System.EventHandler(AddUser_Click);
ToolStripMenuItem DeleteArea = new ToolStripMenuItem();
DeleteArea.Name = "删除组";
DeleteArea.Text = "删除组";
DeleteArea.Click += new System.EventHandler(DeleteArea_Click);
contextMenuStrip.Items.AddRange(
new System.Windows.Forms.ToolStripItem[] {
AddUser,DeleteArea
}
);
}
break;
case "user":
{
this.contextMenuStrip.Items.Clear();
ToolStripMenuItem DeleteUser = new ToolStripMenuItem();
DeleteUser.Name = "删除用户";
DeleteUser.Text = "删除用户";
DeleteUser.Click += new System.EventHandler(DeleteUser_Click);
contextMenuStrip.Items.AddRange(
new System.Windows.Forms.ToolStripItem[] {
DeleteUser
}
);
}
break;
}
}
private void ContractListBakRootItem_Click(object sender, EventArgs e)
{
//this.treeView1.ExpandAll();
}
private void ContractListBakGroupItem_Click(object sender, EventArgs e)
{
List<string> array = new List<string>();
foreach (TreeNode node in this.treeView1.SelectedNode.Nodes)
{
array.Add((node.Text.Split('/'))[0]);
}
//this.treeView1.ExpandAll();
}
private void ImportDataUser_Click(object sender, EventArgs e)
{
//this.treeView1.ExpandAll();
}
private void SearchTreeNode(TreeNodeCollection treeNodes,string fileName)
{
foreach (TreeNode treeNode in treeNodes)
{
if (treeNode.Tag.ToString() == "user")
{
if (treeNode.Text.Equals(fileName))
{
this.treeView1.Nodes.Remove(treeNode);
}
continue;
}
if (treeNode.Nodes.Count > 0)
{
SearchTreeNode(treeNode.Nodes, fileName);
}
}
}
private TreeNode CreateChildNodeByImport(string file)
{
TreeNode node = new TreeNode(file);
node.Tag = "user";
return node;
}
private void ExportUserData_Click(object sender, EventArgs e)
{
}
private void UpdateUserInfo_Click(object sender, EventArgs e)
{
}
private void SendAndGetListByRoot_Click(object sender, EventArgs e)
{
//this.treeView1.ExpandAll();
}
private void SendAndGetListBakRootItem_Click(object sender, EventArgs e)
{
//this.treeView1.ExpandAll();
}
private void SendAndGetListByGroup_Click(object sender, EventArgs e)
{
//this.treeView1.ExpandAll();
}
private void SendAndGetListBakGroupItem_Click(object sender, EventArgs e)
{
//this.treeView1.ExpandAll();
}
private void CheckListByRoot_Click(object sender, EventArgs e)
{
//this.treeView1.ExpandAll();
}
private void CheckListBakRootItem_Click(object sender, EventArgs e)
{
}
private void CheckListByGroup_Click(object sender, EventArgs e)
{
//this.treeView1.ExpandAll();
}
private void CheckListBakGroupItem_Click(object sender, EventArgs e)
{
// this.treeView1.ExpandAll();
}
private void BaitingListByRoot_Click(object sender, EventArgs e)
{
// this.treeView1.ExpandAll();
}
private void BaitingListBakRootItem_Click(object sender, EventArgs e)
{
}
private void BaitingListByGroup_Click(object sender, EventArgs e)
{
}
private void BaitingListBakGroupItem_Click(object sender, EventArgs e)
{
}
private void ProcessListByRoot_Click(object sender, EventArgs e)
{
}
private void ProcessListBakRootItem_Click(object sender, EventArgs e)
{
//this.treeView1.ExpandAll();
}
private void ProcessListByGroup_Click(object sender, EventArgs e)
{
//this.treeView1.ExpandAll();
}
private void ProcessListBakGroupItem_Click(object sender, EventArgs e)
{
}
private void OrderListByRoot_Click(object sender, EventArgs e)
{
//this.treeView1.ExpandAll();
}
private void OrderListBakRootItem_Click(object sender, EventArgs e)
{
//this.treeView1.ExpandAll();
}
private void OrderListByGroup_Click(object sender, EventArgs e)
{
}
private void OrderListBakGroupItem_Click(object sender, EventArgs e)
{
}
private void BakSendAndGetList_Click(object sender, EventArgs e)
{
}
private void BakCheckList_Click(object sender, EventArgs e)
{
}
private void BakBaitingList_Click(object sender, EventArgs e)
{
}
private void BakListItem_Click(object sender, EventArgs e)
{
}
private void BakProcessList_Click(object sender, EventArgs e)
{
}
private void BakOrderList_Click(object sender, EventArgs e)
{
}
private void SendAndGetList_Click(object sender, EventArgs e)
{
}
private void CheckList_Click(object sender, EventArgs e)
{
}
private void ProcessList_Click(object sender, EventArgs e)
{
}
private void BaitingList_Click(object sender, EventArgs e)
{
}
private void OrderList_Click(object sender, EventArgs e)
{
}
private void StatisticsRoot_Click(object sender, EventArgs e)
{
}
private void StatisticsListByGroup_Click(object sender, EventArgs e)
{
}
private void ContractListByRoot_Click(object sender, EventArgs e)
{
}
private void AddArea_Click(object sender, EventArgs e)
{
AddUnit form = new AddUnit(this);
form.ShowDialog();
if (!string.IsNullOrEmpty(unit))
{
TreeNode node = CreateRootNode();
//this.treeView1.Nodes.
//TreeNode root = this.treeView1.Nodes[0];
this.treeView1.Nodes[0].Nodes.Add(node);
SaveToXml();
LoadFormXml();
}
//this.treeView1.ExpandAll();
}
private void RemoveUser(TreeNodeCollection treeNodes)
{
foreach (TreeNode treeNode in treeNodes)
{
if (treeNode.Tag.ToString().Equals("user"))
{
if (treeNode.Text.Equals(user))
{
treeNode.Remove();
}
}
if (treeNode.Nodes.Count > 0)
{
RemoveUser(treeNode.Nodes);
}
}
}
private void AddUser_Click(object sender, EventArgs e)
{
AddUser form = new AddUser(this);
if (form.ShowDialog() == DialogResult.OK)
{
if (!string.IsNullOrEmpty(user))
{
CheckUser(this.treeView1.Nodes);
if (haveUser)
{
if (MessageBox.Show("该用户[" + user + "]已经存在,是否覆盖?", "确认", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
{
RemoveUser(this.treeView1.Nodes);
TreeNode node = CreateChildNode();
TreeNode selectNode = this.treeView1.SelectedNode;
selectNode.Nodes.Add(node);
SaveToXml();
LoadFormXml();
}
else
{
//SetNodeBackColor(this.treeView1.Nodes);
}
}
else
{
TreeNode node = CreateChildNode();
TreeNode selectNode = this.treeView1.SelectedNode;
selectNode.Nodes.Add(node);
SaveToXml();
LoadFormXml();
}
}
}
haveUser = false;
}
private void CheckUser(TreeNodeCollection treeNodes)
{
tmpBool = false;
foreach (TreeNode treeNode in treeNodes)
{
if (treeNode.Tag.ToString().Equals("user"))
{
if (treeNode.Text.Equals(user))
{
treeNode.BackColor = Color.Red;
//treeNode
treeNode.Parent.Expand();
haveUser = true;
}
}
if (treeNode.Nodes.Count > 0)
{
CheckUser(treeNode.Nodes);
}
}
}
private void DeleteUser_Click(object sender, EventArgs e)
{
if (MessageBox.Show("你确定要删除吗?", "删除确认", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
{
if (this.treeView1.SelectedNode == null)
{
return;
}
string[] array = this.treeView1.SelectedNode.Text.Split('/');
this.treeView1.Nodes.Remove(this.treeView1.SelectedNode);
SaveToXml();
LoadFormXml();
}
}
private void DeleteArea_Click(object sender, EventArgs e)
{
if (MessageBox.Show("你确定要删除吗?", "删除确认", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
{
if (this.treeView1.SelectedNode == null)
{
return;
}
if (this.treeView1.SelectedNode.Tag.ToString() == "area")
{
List<string> array = new List<string>();
foreach (TreeNode node in this.treeView1.SelectedNode.Nodes)
{
array.Add((node.Text.Split('/'))[0]);
}
if (array.Count != 0)
{
MessageBox.Show("不能删除非空用户的组结点!", "确定", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
this.treeView1.Nodes.Remove(this.treeView1.SelectedNode);
SaveToXml();
LoadFormXml();
//binary.DeleteAccountDirectory(array[0]);
}
}
}
}
private void ListItem_Click(object sender, EventArgs e)
{
}
private void AddTabPage(string pageTitle, Control ctrForm)
{
}
private void treeView1_DoubleClick(object sender, EventArgs e)
{
}
private void toolbtn_AddUnit_Click(object sender, EventArgs e)
{
AddUnit form = new AddUnit(this);
form.ShowDialog();
if (!string.IsNullOrEmpty(unit))
{
TreeNode node = CreateRootNode();
//this.treeView1.Nodes.
//TreeNode root = this.treeView1.Nodes[0];
this.treeView1.Nodes[0].Nodes.Add(node);
//this.treeView1.Nodes["root"].Nodes.Add(node);
SaveToXml();
LoadFormXml();
}
//this.treeView1.ExpandAll();
}
private TreeNode CreateRootNode()
{
TreeNode node = new TreeNode(this.unit);
node.Tag = "area";
node.ImageIndex = 1;
node.SelectedImageIndex = 1;
return node;
}
private TreeNode CreateChildNode()
{
TreeNode node = new TreeNode(this.user);
node.Tag = "user";
node.ImageIndex = 2;
node.SelectedImageIndex = 2;
return node;
}
public void SaveToXml()
{
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);
xml.SaveXml(doc);
}
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);
}
}
}
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
string path = null;
TreeNode node = this.treeView1.SelectedNode;
//node.ForeColor = Color.Red;
if (node != null)
{
path = node.Text;
while (node.Parent != null)
{
node = node.Parent;
path = node.Text + "\\" + path;
}
}
}
private void treeView1_Click(object sender, EventArgs e)
{
//this.treeView1.Nodes.f
object tmpObj = this.treeView1.GetNodeAt(this.treeView1.PointToClient(Cursor.Position));
if (tmpObj != null)
{
if ((tmpObj as TreeNode).Bounds.Contains(this.treeView1.PointToClient(Cursor.Position)))
{
tmpBool = true;
}
}
}
private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
if (tmpBool)
{
e.Cancel = tmpBool;
}
tmpBool = false;
}
private void treeView1_BeforeCollapse(object sender, TreeViewCancelEventArgs e)
{
if (tmpBool)
{
e.Cancel = tmpBool;
}
tmpBool = false;
}
private void treeView1_MouseClick(object sender, MouseEventArgs e)
{
}
private void treeView1_MouseMove(object sender, MouseEventArgs e)
{
}
private void treeView1_MouseLeave(object sender, EventArgs e)
{
}
private void toolbtnSearch_Click(object sender, EventArgs e)
{
string searchName = this.toolText.Text;
SetNodeBackColor(this.treeView1.Nodes);
if (!string.IsNullOrEmpty(searchName))
{
SearchXml(this.treeView1.Nodes, searchName);
}
}
private void SetNodeBackColor(TreeNodeCollection treeNodes)
{
foreach (TreeNode treeNode in treeNodes)
{
treeNode.BackColor = Color.White;
if (treeNode.Tag.ToString().Equals("area"))
{
treeNode.Collapse();
}
if (treeNode.Nodes.Count > 0)
{
SetNodeBackColor(treeNode.Nodes);
}
}
}
private void SearchXml(TreeNodeCollection treeNodes,string search)
{
foreach (TreeNode treeNode in treeNodes)
{
if (treeNode.Text.ToString().Contains(search))
{
treeNode.BackColor = Color.Coral;
if(treeNode.Parent!=null)
{
treeNode.Parent.Expand();
}
}
if (treeNode.Nodes.Count > 0)
{
SearchXml(treeNode.Nodes,search);
}
}
}
private void toolText_TextChanged(object sender, EventArgs e)
{
toolbtnSearch_Click(sender, e);
}
//节点的选中取消事件
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
if (e.Node.Checked)
{
setChildNodeCheckedState(e.Node, true);
}
else
{
setChildNodeCheckedState(e.Node, false);
}
}
//选中节点之后,选中节点的所有子节点
private void setChildNodeCheckedState(TreeNode currNode, bool state)
{
TreeNodeCollection nodes = currNode.Nodes;
if (nodes.Count > 0)
foreach (TreeNode tn in nodes)
{
tn.Checked = state;
setChildNodeCheckedState(tn, state);
}
}
}
}
这个是class1的代码
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Windows.Forms;
namespace TreeView
{
public class XmlOperator
{
private string filepath; //文件路径
public const string xmlContent = "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?><Menu><Item Title=\"所有\"><![CDATA[root]]></Item></Menu>";
public string Filepath
{
get { return filepath; }
set { filepath = value; }
}
private string filename; //Xml文件名
public string Filename
{
get { return filename; }
set { filename = value; }
}
public XmlOperator(string filepath, string filename)
{
this.filepath = filepath + "\\" + filename;
this.filename = filename;
}
public XmlNodeList GetXmlNodeList()
{
try
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(filepath);
XmlNodeList xmlNodes = xmlDoc.DocumentElement.ChildNodes;
return xmlNodes;
}
catch
{
MessageBox.Show("用户目录文件已损坏,自动恢复到初始状态!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
RecoverXml();
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(filepath);
XmlNodeList xmlNodes = xmlDoc.DocumentElement.ChildNodes;
return xmlNodes;
}
}
public void RecoverXml()
{
XmlDocument doc = new XmlDocument();
doc.InnerXml = xmlContent;
this.SaveXml(doc);
}
public void SaveXml(XmlDocument doc)
{
doc.Save(filepath);
}
}
}
添加用户组界面代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace GlassProcess
{
public partial class AddUnit : Form
{
DbView dbview; //当然就是DbView
public AddUnit(DbView form)
{
InitializeComponent();
dbview = form;
}
///
/// 把dbview中的unit单元设置为txtUnit的值,且关闭窗体
///
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnAdd_Click(object sender, EventArgs e)
{
dbview.unit = this.txtUnit.Text;
this.Close();
}
private void AddUnit_Load(object sender, EventArgs e)
{
}
}
}
添加用户界面代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace GlassProcess
{
public partial class AddUser : Form
{
private DbView form;//还是DbView
public AddUser(DbView from)
{
InitializeComponent();
this.form = from;
}
private void btnAdd_Click(object sender, EventArgs e)
{
form.user = this.txtUser.Text.Trim(); //将dbView中的user设置为txtUser.Text的值
DialogResult = DialogResult.OK;
this.Close();
}
private void AddUser_Load(object sender, EventArgs e)
{
}
}
}