岁月总是愈来愈短 日子也总是愈来愈快 珍惜
System.Windows.Forms.TreeView 的使用示例
private System.Windows.Forms.TreeView menuTree; ////// 判断用户是否有权限操作该菜单 /// 2011-10-20 Aiice /// public bool HasMenu(string code) { cn.myeol.www.PosService xmlService = new cn.myeol.www.PosService (); xmlService.Url=Global.g_WebServiceURL; string SQL = "SELECT * FROM RoleMenus WHERE CanView = 1 AND RoleID IN (SELECT RoleID FROM UserRoles WHERE UserID = (SELECT UserID FROM Users WHERE UserName = '"+Global.g_UserName+"')) AND MenuID = '"+code+"'"; DataSet ds = xmlService.GetDataSetFromSystemDatabase(Global.g_sTokenKey,SQL); if(ds.Tables[0].Rows.Count >0) { return true; } else { return false; } } ////// 树形菜单单击事件 /// 2011-10-19 Aiice /// private void MenuTreeClick(object sender, System.Windows.Forms.TreeViewEventArgs e) { TreeNode cNode = menuTree.SelectedNode; if(cNode.Text=="退出系统") { this.Close(); } else { try { //Action属性为自定义树形 所以这里要强制转换为QzTreeNode string action = ((Smart.Warehouse.frmMain.QzTreeNode)(cNode)).Action; LoadForms("Smart.Warehouse.exe",action); } catch { //Nothing TODO } } } ////// 查询是否有子form如果有激活显示 /// 2011-10-20 Aiice /// /// 子form类名称 private bool ShowChildrenForm(string p_ChildrenFormText) { int i; string[] FormNames = p_ChildrenFormText.Split('.'); string FormName = FormNames[FormNames.Length-1]; for (i = 0; i < this.MdiChildren.Length; i++) { if (this.MdiChildren[i].Name == FormName) { this.MdiChildren[i].Activate(); return true; } } return false; } ////// 动态载入form类 /// 2011-10-19 Aiice /// /// form对应的dll文件或exe文件 /// form类的全称 包括命名空间名称 private void LoadForms(string assFile ,string FormName) { if(!ShowChildrenForm(FormName)) { Assembly assembly =Assembly.GetExecutingAssembly(); if(assFile!="") { assembly = Assembly.LoadFrom(assFile); } Type t = assembly.GetType(FormName); Form fm = (Form)Activator.CreateInstance(t); fm.MdiParent =this; fm.Show(); } } ////// 获取所有节点展开后的高度总和 /// 2011-10-21 Aiice /// private int AddHeight(TreeNodeCollection nodes) { int intHeight = 0; foreach (TreeNode node in nodes) { intHeight += node.Bounds.Height; if (node.Nodes.Count > 0) { intHeight += AddHeight(node.Nodes); } } return intHeight; } private void frmMain_Load(object sender, System.EventArgs e) { //动态生成树形菜单 cn.myeol.www.PosService xmlService = new cn.myeol.www.PosService (); xmlService.Url=Global.g_WebServiceURL; string SQL = "SELECT Caption,ID FROM Menus WHERE ParentID IN (SELECT ID FROM Menus WHERE Code = 'SMC01-CS01') ORDER BY ID DESC"; DataSet ds = xmlService.GetDataSetFromSystemDatabase(Global.g_sTokenKey,SQL); foreach(DataRow dr in ds.Tables[0].Rows) { if(HasMenu(dr[1].ToString())) { TreeNode rootNode = new TreeNode(dr[0].ToString()); menuTree.Nodes.Add(rootNode); string sSQL = "SELECT Caption,ID,EditSrc,ImageURL FROM Menus WHERE ParentID = '"+dr[1].ToString()+"' ORDER BY ID DESC"; DataSet sds = xmlService.GetDataSetFromSystemDatabase(Global.g_sTokenKey,sSQL); foreach(DataRow sdr in sds.Tables[0].Rows) { if(HasMenu(sdr[1].ToString())) { //此时采用了自定义的TreeNode对象我要添加属性 QzTreeNode secondNode = new QzTreeNode(); secondNode.Logo = ""; secondNode.Text = sdr[0].ToString(); secondNode.Action = sdr[2].ToString(); secondNode.ImageIndex = int.Parse(sdr[3].ToString()); rootNode.Nodes.Add(secondNode); } } } } //添加退出系统按钮 TreeNode exitNode = new TreeNode("退出系统"); exitNode.ImageIndex = 19; exitNode.ForeColor= Color.Red; exitNode.SelectedImageIndex = 19; menuTree.Nodes.Add(exitNode); menuTree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(MenuTreeClick); menuTree.ExpandAll(); //自动改变trueview高度 int intHeight = AddHeight(menuTree.Nodes); menuTree.Height = intHeight; } ////// 自定义TreeNode类 /// public class QzTreeNode:TreeNode { public string Logo; public string Action; public QzTreeNode QzParent { get{ return (QzTreeNode) base.Parent; } } public override object Clone() { QzTreeNode copy =(QzTreeNode)base.Clone(); copy.Logo = Logo; copy.Action =Action; return copy; } }
| 打印文章 | 这篇文章由Aiice于2011年10月24日 3:20 上午发表在ASP.NET。你可以订阅RSS 2.0 也可以发表评论或引用到你的网站。 |
