/// <summary> /// 创建下级菜单 /// </summary> /// <param name="current">下级菜单的父节点</param> /// <param name="ParentPanel">下级菜单所在控件</param> /// <param name="ParentTop">下级菜单所在控件的头部</param> /// <param name="label">显示下级的‘+’号,目前后label,后期可能改成图片</param> private void createSubsetMenu(String current, PanelEx ParentPanel, PanelEx ParentTop, Label label) { int currentMenuLevel = menuLevel; //记录当前菜单级别 //找子集 List <dynamic> menuList = new List <dynamic>(); //存子集 foreach (dynamic menu in dataSourceList) { String menuParent = menu.GetType().GetProperty(parentFieldName).GetValue(menu, null); if (menuParent != null && menuParent.Equals(current)) { menuList.Add(menu); } } if (menuList.Count <= 0) { //没有子集的时候不显示+号 label.Visible = false; Padding pd = ParentTop.Padding; int left = pd.Left; if (useZoom) { left = pd.Left + 15; } ParentTop.Padding = new Padding(left, pd.Top, pd.Right, pd.Bottom); return; } else if (menuList.Count > 0) { //子菜单面板 PanelEx p1 = new PanelEx(); p1.BorderStyleTop = ButtonBorderStyle.None; p1.BorderStyleBottom = ButtonBorderStyle.None; p1.BorderStyleLeft = ButtonBorderStyle.None; p1.BorderStyleRight = ButtonBorderStyle.None; p1.BorderColor = Color.FromArgb(157, 160, 170); p1.Margin = new Padding(0, 0, 0, 0); p1.Padding = new Padding(0, 1, 0, 0); //panel23.Visible = false; p1.AutoSize = true; p1.Dock = DockStyle.Top; //循环添加菜单 foreach (dynamic menu in menuList) { //子级菜单 PanelEx p2 = new PanelEx();//某个子集的面板 p2.BorderColor = borderColor; p2.BorderStyleTop = ButtonBorderStyle.None; p2.BorderStyleBottom = ButtonBorderStyle.None; p2.BorderStyleRight = ButtonBorderStyle.None; p2.BorderStyleLeft = ButtonBorderStyle.None; p2.BackColor = Color.Transparent; p2.AutoSize = true; p2.Dock = DockStyle.Top; PanelEx p3 = new PanelEx();//某个子集的选项头 p3.BorderColor = borderColor; p3.BorderStyleTop = ButtonBorderStyle.None; p3.BorderStyleBottom = ButtonBorderStyle.None; p3.BorderStyleLeft = ButtonBorderStyle.None; p3.BorderStyleRight = ButtonBorderStyle.None; p3.BackColor = Color.Transparent; p3.Height = MenuItemHeight; p3.Dock = DockStyle.Top; p3.Padding = new Padding((menuLevel - 1) * 15, 6, 1, 1); Label l1 = new Label();//下拉收缩的控件 l1.Visible = useZoom; l1.Text = "-"; l1.Width = 15; l1.Font = font; l1.Dock = DockStyle.Left; l1.Click += new EventHandler(ExpansionContractionClicked); p3.Controls.Add(l1); Label l2 = new Label(); //l2.BackColor = Color.Transparent; l2.Font = font; l2.AutoSize = true; l2.Text = menu.GetType().GetProperty(displayMember).GetValue(menu, null); //菜单显示的值 l2.Tag = menu.GetType().GetProperty(valueMember).GetValue(menu, null); //菜单对应的值 l2.Dock = DockStyle.Left; l2.MouseEnter += new EventHandler(LabelMouseEnter); l2.MouseLeave += new EventHandler(LabelMouseLeave); l2.Click += new EventHandler(LabelMenuClicked); p3.MouseEnter += new EventHandler(PanelMouseEnter); p3.MouseLeave += new EventHandler(PanelMouseLeave); p3.Click += new EventHandler(PanelMenuClicked); p3.Controls.Add(l2); l2.BringToFront(); p2.Controls.Add(p3); p1.Controls.Add(p2); p2.BringToFront(); //创建下级菜单 menuLevel++; current = menu.GetType().GetProperty(keyFieldName).GetValue(menu, null); createSubsetMenu(current, p2, p3, l1); menuLevel = currentMenuLevel; } ParentPanel.Controls.Add(p1); p1.BringToFront(); } }
/// <summary> /// 根据数据源生成界面 /// </summary> private void createUI() { this.Controls.Clear(); string type = dataSource.GetType().Name; switch (type) { case "DataSet": DataSet ds = (DataSet)dataSource; throw new ArgumentException("目前还不支持DataSet类型"); //if (ds.Check()) //{ // rp.DataSource = ds.Tables[0]; //} //break; case "DataTable": DataTable dt = (DataTable)dataSource; throw new ArgumentException("目前还不支持DataTable类型"); //if (dt.Rows.Count > 0) //{ // rp.DataSource = dt; //} //break; case "List`1": //第一步:找出一级菜单列表 List <dynamic> dyList = new List <dynamic>(); //存一级菜单 IEnumerable list = dataSource as IEnumerable; foreach (var item in list) { dynamic temp = item; dataSourceList.Add(item); if (ifTopLevel(temp)) { dyList.Add(temp); } } //第二步:生成菜单控件 //遍历生成一级菜单 foreach (dynamic entity in dyList) { //选项,包括该选项的所有字菜单 PanelEx p1 = new PanelEx(); p1.BorderColor = borderColor; p1.BorderStyleTop = ButtonBorderStyle.None; p1.BorderStyleBottom = ButtonBorderStyle.None; p1.BorderStyleRight = ButtonBorderStyle.None; p1.BorderStyleLeft = ButtonBorderStyle.None; p1.BackColor = Color.Transparent; p1.AutoSize = true; p1.Dock = DockStyle.Top; //当前选项头 PanelEx p2 = new PanelEx(); p2.BorderColor = borderColor; p2.BorderStyleTop = ButtonBorderStyle.None; p2.BorderStyleLeft = ButtonBorderStyle.None; p2.BorderStyleRight = ButtonBorderStyle.None; p2.BorderStyleBottom = ButtonBorderStyle.None; p2.Margin = new Padding(0, 0, 0, 0); p2.Padding = new Padding(0, 6, 0, 0); p2.Height = MenuItemHeight; p2.Dock = DockStyle.Top; Label l1 = new Label(); //下拉收缩的控件 l1.Visible = useZoom; l1.Text = "-"; l1.Width = 15; l1.Font = font; l1.Dock = DockStyle.Left; l1.Click += new EventHandler(ExpansionContractionClicked); p2.Controls.Add(l1); //当前选项文本 Label l2 = new Label(); l2.Text = entity.GetType().GetProperty(displayMember).GetValue(entity, null); //菜单显示的值 l2.Tag = entity.GetType().GetProperty(valueMember).GetValue(entity, null); //菜单对应的值 l2.Font = font; l2.Dock = DockStyle.Left; l2.MouseEnter += new EventHandler(LabelMouseEnter); l2.MouseLeave += new EventHandler(LabelMouseLeave); l2.Click += new EventHandler(LabelMenuClicked); p2.MouseEnter += new EventHandler(PanelMouseEnter); p2.MouseLeave += new EventHandler(PanelMouseLeave); p2.Click += new EventHandler(PanelMenuClicked); p2.Controls.Add(l2); l2.BringToFront(); p1.Controls.Add(p2); //创建下级菜单 menuLevel++; String current = entity.GetType().GetProperty(keyFieldName).GetValue(entity, null); createSubsetMenu(current, p1, p2, l1); menuLevel = 1; this.Controls.Add(p1); p1.BringToFront(); } break; default: break; } }