diff --git a/插件库/Lskj.Business/Impl/SystemInfo.cs b/插件库/Lskj.Business/Impl/SystemInfo.cs index 8109df6..50a7e0a 100644 --- a/插件库/Lskj.Business/Impl/SystemInfo.cs +++ b/插件库/Lskj.Business/Impl/SystemInfo.cs @@ -328,6 +328,7 @@ namespace Lskj.Business Instance.EnableSpecialInfoProcess = item.Table.Columns.Contains("EnableSpecialInfoProcess") && !string.IsNullOrEmpty(item["EnableSpecialInfoProcess"] + "") ? "1".Equals(item["EnableSpecialInfoProcess"] + "") : false; Instance.SourceFilteringMobile = item.Table.Columns.Contains("SourceFilteringMobile") && !string.IsNullOrEmpty(item["SourceFilteringMobile"] + "") ? "1".Equals(item["SourceFilteringMobile"] + "") : false; Instance.LoginUsername = item.Table.Columns.Contains("LoginUsername") && !string.IsNullOrEmpty(item["LoginUsername"] + "") ? item["LoginUsername"] + "" : ""; + Instance.MainLeftShowMode = item.Table.Columns.Contains("MainLeftShowMode") && !string.IsNullOrEmpty(item["MainLeftShowMode"] + "") ? item["MainLeftShowMode"] + "" : ""; } /// /// 高拍仪AccessKey @@ -1144,6 +1145,10 @@ namespace Lskj.Business ///登录界面,用户名显示字段 /// public string LoginUsername; + /// + /// 主界面左侧树展示模式 + /// + public string MainLeftShowMode; } } diff --git a/插件库/Lskj.Main/Control/MainPanelControlEx.cs b/插件库/Lskj.Main/Control/MainPanelControlEx.cs index aff577c..a03c370 100644 --- a/插件库/Lskj.Main/Control/MainPanelControlEx.cs +++ b/插件库/Lskj.Main/Control/MainPanelControlEx.cs @@ -338,7 +338,7 @@ namespace Lskj.Main.Control { this.SetMenus(); this.SetSearchMenus(); - if (!this._allMenus.Columns.Contains("groupcaption") || isFlowLayout) + if (!CanUseLeftGroupTreeMenu()) { this.tv_left.Visible = false; } @@ -803,6 +803,26 @@ namespace Lskj.Main.Control } } + private bool CanUseLeftGroupTreeMenu() + { + return "1".Equals((SystemInfo.Instance.MainLeftShowMode + "").Trim()) && this._allMenus.Columns.Contains("groupcaption") && !isFlowLayout; + } + + private void ResetLeftMenuBarPanel() + { + SetLeftGroupSeparatorVisible(false); + this.pl_center_left.Padding = new Padding(4); + this.pl_center_left.BackColor = Color.FromArgb(10, 87, 167); + if (_leftGroupTreeView != null && this.pl_center_left.Controls.Contains(_leftGroupTreeView)) + { + this.pl_center_left.Controls.Remove(_leftGroupTreeView); + } + if (this.pl_center_left.Controls.Contains(this.tv_left)) + { + this.tv_left.Visible = false; + } + } + private ImageList GetLeftGroupTreeIcons() { if (_leftGroupTreeIcons != null) return _leftGroupTreeIcons; @@ -1083,7 +1103,11 @@ namespace Lskj.Main.Control List rows = this._allMenus.AsEnumerable().Where(n => (n["subsysid"] + "").Equals(ERPInfo.Instance.SubSysId) && !string.IsNullOrEmpty(n["menustruct"] + "")).ToList(); if (rows != null && rows.Count > 0) { - bool useLeftGroupTreeMenu = this._allMenus.Columns.Contains("groupcaption") && !isFlowLayout; + bool useLeftGroupTreeMenu = CanUseLeftGroupTreeMenu(); + if (!useLeftGroupTreeMenu) + { + ResetLeftMenuBarPanel(); + } DataTable leftGroupTreeTable = useLeftGroupTreeMenu ? CreateLeftGroupTreeTable() : null; int buttonTop = Convert.ToInt32(0.05 * DpiY); // 按钮上边距 int menuLeft = Convert.ToInt32(0.05 * DpiY), menuTop = Convert.ToInt32(0.05 * DpiY); // 模块距离左边距,模块距离顶部边距 diff --git a/插件库/Lskj.Main/Control/TreeViewCustom.cs b/插件库/Lskj.Main/Control/TreeViewCustom.cs index 46dad72..30a0d4c 100644 --- a/插件库/Lskj.Main/Control/TreeViewCustom.cs +++ b/插件库/Lskj.Main/Control/TreeViewCustom.cs @@ -21,7 +21,7 @@ namespace Lskj.Main.Control { public partial class TreeViewCustom : UserControl { - #region 公有属性 + #region 公有属性 /// /// 父节点字段 /// @@ -43,6 +43,30 @@ namespace Lskj.Main.Control /// 左侧菜单事件注册 /// public ButtonClickEventHandler OnButtonClickEvent; + /// + /// 所有节点点击时都触发回调,默认保持原来的末级节点触发逻辑。 + /// + public bool RaiseClickEventOnAllNodes; + /// + /// 默认显示所有节点。 + /// + public bool ExpandAllNodes; + /// + /// 是否允许点击节点时展开/折叠子节点。 + /// + public bool AllowNodeCollapse = true; + /// + /// 鼠标滑过节点时是否触发点击回调。 + /// + public bool SwitchOnMouseMove; + /// + /// 使用旧版左侧菜单文字大小。 + /// + public bool UseMenuBarTextStyle; + /// + /// 使用分组左侧菜单专用图片样式。 + /// + public bool UseGroupTreeImageStyle; #endregion #region 私有属性 @@ -65,6 +89,14 @@ namespace Lskj.Main.Control /// 缓存所有按钮 /// private Dictionary _dicButtons = new Dictionary(); + /// + /// 记录节点自身是否应显示,避免 Control.Visible 受父控件可见性影响。 + /// + private HashSet _visibleNodeValues = new HashSet(); + /// + /// 默认展开节点。 + /// + private string _defaultExpandNodeValue; #endregion #region Api @@ -108,6 +140,7 @@ namespace Lskj.Main.Control public TreeViewCustom() { InitializeComponent(); + this.plTreeView.Resize += (s, e) => ReflowTreeNodes(); } protected override void WndProc(ref Message m) @@ -154,39 +187,42 @@ namespace Lskj.Main.Control /// 版本:1.0 /// public void SetDataSource(DataTable dtTable) + { + SetDataSource(dtTable, string.Empty); + } + + /// + /// 加载菜单并展开默认节点。 + /// + public void SetDataSource(DataTable dtTable, string defaultExpandNodeValue) { int index = 1; this._dataSource = dtTable; + this._lastTreeNode = null; + this._lastMenuId = null; + this._defaultExpandNodeValue = defaultExpandNodeValue; + this._dicTreeNodes.Clear(); + this._dicButtons.Clear(); + this._visibleNodeValues.Clear(); + this.plTreeView.Controls.Clear(); if (_dataSource == null || _dataSource.Rows.Count == 0) return; - - // 获取根节点 - DataRow[] rootRows = _dataSource.Rows.Cast().Where(x => (x[ParentField] + "").Length == ParentKeyLength || (x[ParentField] + "").Length == ParentKeyLength * 2).ToArray(); - foreach (DataRow item in _dataSource.Rows) + var leftItems = _dataSource.Rows.Cast().OrderBy(n => n[ParentField] + ""); + foreach (DataRow item in leftItems) { - int length = (item[ParentField] + "").Length; + string nodeValue = item[ParentField] + ""; + int length = nodeValue.Length; TreeNodeCustom treeNode = new TreeNodeCustom(); - treeNode.Dock = DockStyle.Top; - treeNode.Tag = item[ParentField] + ""; + treeNode.Dock = DockStyle.None; + treeNode.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right; + treeNode.Tag = nodeValue; treeNode.TabIndex = index; - - if (length == ParentKeyLength) + if (UseMenuBarTextStyle) { - treeNode.btnTreeNode.BackgroundImage = Lskj.Main.Properties.Resources.node_default; - treeNode.btnTreeNode.Font = new Font("微软雅黑", 12); - } - else if (length / ParentKeyLength == 2) - { - treeNode.btnTreeNode.BackgroundImage = Lskj.Main.Properties.Resources.node2_default; - treeNode.btnTreeNode.Padding = new Padding(20, 1, 3, 3); - treeNode.btnTreeNode.Font = new Font("微软雅黑", 11); - } - else - { - treeNode.btnTreeNode.BackgroundImage = Lskj.Main.Properties.Resources.node3_default; - treeNode.btnTreeNode.Padding = new Padding(30, 1, 3, 3); - treeNode.btnTreeNode.Font = new Font("微软雅黑", 10); + treeNode.Height = 44; } + SetNodeDefaultStyle(treeNode.btnTreeNode, GetNodeLevel(nodeValue)); + treeNode.btnTreeNode.Name = index + ""; treeNode.btnTreeNode.Text = item[TextField] + ""; treeNode.btnTreeNode.Tag = item; @@ -197,12 +233,322 @@ namespace Lskj.Main.Control plTreeView.Controls.Add(treeNode); _dicButtons.Add(index + "", treeNode.btnTreeNode); - List parentNodes = getParentNodes(item[ParentField] + ""); + List parentNodes = getParentNodes(nodeValue); parentNodes.Add(treeNode); // 隐藏需要放在添加后,否则出现顺序错乱 - treeNode.Visible = length == ParentKeyLength; + SetNodeVisibleState(treeNode, ExpandAllNodes || length == ParentKeyLength || IsDefaultExpandedChildNode(nodeValue)); index++; } + RefreshNodeStyles(); + ReflowTreeNodes(); + } + + /// + /// 展开指定节点。 + /// + public void ExpandNode(string nodeValue) + { + if (string.IsNullOrEmpty(nodeValue)) return; + + foreach (TreeNodeCustom node in plTreeView.Controls.OfType()) + { + string menuKey = node.Tag + ""; + if (menuKey.Length <= nodeValue.Length || !menuKey.StartsWith(nodeValue)) continue; + SetNodeVisibleState(node, true); + } + RefreshNodeStyles(); + ReflowTreeNodes(); + } + + /// + /// 选中指定节点,仅更新样式,不触发业务回调。 + /// + public void SelectNode(string nodeValue) + { + if (string.IsNullOrEmpty(nodeValue)) return; + + TreeNodeCustom treeNode = plTreeView.Controls.OfType().FirstOrDefault(n => (n.Tag + "").Equals(nodeValue)); + if (treeNode == null) return; + + SelectNodeButton(treeNode.btnTreeNode, nodeValue); + } + + private int GetNodeLevel(string nodeValue) + { + if (ParentKeyLength <= 0 || string.IsNullOrEmpty(nodeValue)) return 1; + return Math.Max(1, nodeValue.Length / ParentKeyLength); + } + + private int GetVisualNodeLevel(string nodeValue) + { + return GetNodeLevel(nodeValue); + } + + private bool IsDefaultExpandedChildNode(string nodeValue) + { + return !string.IsNullOrEmpty(_defaultExpandNodeValue) + && nodeValue.Length > _defaultExpandNodeValue.Length + && nodeValue.StartsWith(_defaultExpandNodeValue); + } + + private void SetNodeVisibleState(TreeNodeCustom node, bool visible) + { + if (node == null) return; + + string nodeValue = node.Tag + ""; + if (visible) + { + _visibleNodeValues.Add(nodeValue); + } + else + { + _visibleNodeValues.Remove(nodeValue); + } + node.Visible = visible; + } + + private bool GetNodeVisibleState(TreeNodeCustom node) + { + if (node == null) return false; + + return _visibleNodeValues.Contains(node.Tag + ""); + } + + private void RefreshNodeStyles() + { + foreach (TreeNodeCustom node in plTreeView.Controls.OfType()) + { + string nodeValue = node.Tag + ""; + SetNodeDefaultStyle(node.btnTreeNode, GetVisualNodeLevel(nodeValue)); + } + + if (!string.IsNullOrEmpty(_lastMenuId) && _dicButtons.ContainsKey(_lastMenuId)) + { + Button button = _dicButtons[_lastMenuId]; + TreeNodeCustom treeNode = button.Parent as TreeNodeCustom; + SetNodeSelectImage(button, GetVisualNodeLevel(treeNode == null ? string.Empty : treeNode.Tag + "")); + } + } + + private void ReflowTreeNodes() + { + if (plTreeView == null) return; + + int top = 0; + int width = Math.Max(0, plTreeView.ClientSize.Width); + var parNodes = plTreeView.Controls.OfType().OrderBy(n => n.TabIndex); + foreach (TreeNodeCustom node in parNodes) + { + node.Width = width; + node.Left = 0; + node.Top = top; + if (!GetNodeVisibleState(node)) continue; + + top += node.Height; + } + plTreeView.AutoScrollMinSize = new Size(0, top); + } + + private bool HasChildNodes(string nodeValue) + { + if (string.IsNullOrEmpty(nodeValue) || !_dicTreeNodes.ContainsKey(nodeValue)) return false; + return _dicTreeNodes[nodeValue].Any(n => (n.Tag + "").Length > nodeValue.Length); + } + + private bool HasVisibleChildNodes(string nodeValue) + { + if (string.IsNullOrEmpty(nodeValue) || !_dicTreeNodes.ContainsKey(nodeValue)) return false; + return _dicTreeNodes[nodeValue].Any(n => (n.Tag + "").Length > nodeValue.Length && GetNodeVisibleState(n)); + } + + private Image GetGroupTreeDefaultImage(int nodeLevel) + { + if (nodeLevel <= 1) return Lskj.Main.Properties.Resources.tree_group_l1_default; + if (nodeLevel == 2) return Lskj.Main.Properties.Resources.tree_group_l2_default; + return Lskj.Main.Properties.Resources.tree_group_l3_default; + } + + private Image GetGroupTreeMoveImage(int nodeLevel) + { + if (nodeLevel <= 1) return Lskj.Main.Properties.Resources.tree_group_l1_move; + if (nodeLevel == 2) return Lskj.Main.Properties.Resources.tree_group_l2_move; + return Lskj.Main.Properties.Resources.tree_group_l3_move; + } + + private Image GetGroupTreeSelectImage(int nodeLevel) + { + if (nodeLevel <= 1) return Lskj.Main.Properties.Resources.tree_group_l1_select; + if (nodeLevel == 2) return Lskj.Main.Properties.Resources.tree_group_l2_select; + return Lskj.Main.Properties.Resources.tree_group_l3_select; + } + + private void SetNodeDefaultStyle(Button button, int nodeLevel) + { + if (button == null) return; + + if (UseGroupTreeImageStyle) + { + button.BackgroundImage = GetGroupTreeDefaultImage(nodeLevel); + button.BackgroundImageLayout = ImageLayout.Stretch; + button.Image = null; + button.TextImageRelation = TextImageRelation.Overlay; + button.TabStop = false; + button.FlatAppearance.BorderSize = 0; + button.FlatAppearance.MouseDownBackColor = Color.Transparent; + button.FlatAppearance.MouseOverBackColor = Color.Transparent; + button.Padding = new Padding(34 + Math.Max(0, nodeLevel - 1) * 12, 0, 3, 0); + button.Font = new Font("微软雅黑", 12); + button.TextAlign = ContentAlignment.MiddleLeft; + return; + } + + if (UseMenuBarTextStyle) + { + button.BackgroundImage = Lskj.Main.Properties.Resources.left_default; + button.BackgroundImageLayout = ImageLayout.Stretch; + button.Image = null; + button.TextImageRelation = TextImageRelation.Overlay; + button.Font = new Font("微软雅黑", 10); + button.Padding = new Padding(20 + Math.Max(0, nodeLevel - 1) * 20, 3, 3, 3); + button.TextAlign = ContentAlignment.MiddleLeft; + return; + } + + if (nodeLevel <= 1) + { + button.BackgroundImage = Lskj.Main.Properties.Resources.node_default; + button.Image = null; + button.Padding = new Padding(10, 0, 0, 0); + button.Font = new Font("微软雅黑", 12); + } + else if (nodeLevel == 2) + { + button.BackgroundImage = Lskj.Main.Properties.Resources.node2_default; + button.Image = null; + button.Padding = new Padding(20, 1, 3, 3); + button.Font = new Font("微软雅黑", 11); + } + else + { + button.BackgroundImage = Lskj.Main.Properties.Resources.node3_default; + button.Image = null; + button.Padding = new Padding(30 + Math.Max(0, nodeLevel - 3) * 10, 1, 3, 3); + button.Font = new Font("微软雅黑", 10); + } + } + + private void SetNodeDefaultImage(Button button, int nodeLevel) + { + if (button == null) return; + + if (UseGroupTreeImageStyle) + { + button.BackgroundImage = GetGroupTreeDefaultImage(nodeLevel); + return; + } + + if (UseMenuBarTextStyle) + { + button.BackgroundImage = Lskj.Main.Properties.Resources.left_default; + return; + } + + if (nodeLevel <= 1) + { + button.BackgroundImage = Lskj.Main.Properties.Resources.node_default; + } + else if (nodeLevel == 2) + { + button.BackgroundImage = Lskj.Main.Properties.Resources.node2_default; + } + else + { + button.BackgroundImage = Lskj.Main.Properties.Resources.node3_default; + } + } + + private void SetNodeSelectImage(Button button, int nodeLevel) + { + if (button == null) return; + + if (UseGroupTreeImageStyle) + { + button.BackgroundImage = GetGroupTreeSelectImage(nodeLevel); + return; + } + + if (UseMenuBarTextStyle) + { + button.BackgroundImage = Lskj.Main.Properties.Resources.left_select; + return; + } + + if (nodeLevel <= 1) + { + button.BackgroundImage = Lskj.Main.Properties.Resources.node_select; + } + else if (nodeLevel == 2) + { + button.BackgroundImage = Lskj.Main.Properties.Resources.node2_select; + } + else + { + button.BackgroundImage = Lskj.Main.Properties.Resources.node3_select; + } + } + + private void SetNodeMoveImage(Button button, int nodeLevel) + { + if (button == null) return; + + if (UseGroupTreeImageStyle) + { + button.BackgroundImage = GetGroupTreeMoveImage(nodeLevel); + return; + } + + if (UseMenuBarTextStyle) + { + button.BackgroundImage = Lskj.Main.Properties.Resources.left_select; + return; + } + + if (nodeLevel <= 1) + { + button.BackgroundImage = Lskj.Main.Properties.Resources.node_select; + } + else if (nodeLevel == 2) + { + button.BackgroundImage = Lskj.Main.Properties.Resources.node2_move; + } + else + { + button.BackgroundImage = Lskj.Main.Properties.Resources.node3_move; + } + } + + private void SelectNodeButton(Button button, string nodeValue) + { + if (button == null) return; + + if (!string.IsNullOrEmpty(_lastMenuId) && _lastMenuId != button.Name && _dicButtons.ContainsKey(_lastMenuId)) + { + Button lastButton = _dicButtons[_lastMenuId]; + TreeNodeCustom lastNode = lastButton.Parent as TreeNodeCustom; + SetNodeDefaultImage(lastButton, GetVisualNodeLevel(lastNode == null ? string.Empty : lastNode.Tag + "")); + } + + SetNodeSelectImage(button, GetVisualNodeLevel(nodeValue)); + _lastMenuId = button.Name; + } + + private void TriggerNodeEvent(Button button, string nodeValue) + { + SelectNodeButton(button, nodeValue); + if (OnButtonClickEvent != null) + { + this.OnButtonClickEvent(button); + } } /// /// 说明:树点击 @@ -226,54 +572,47 @@ namespace Lskj.Main.Control { _lastTreeNode = nodeValue; } - if (nodeValue.Length == ParentKeyLength) - { - treeNode.btnTreeNode.BackgroundImage = _dicTreeNodes[nodeValue][0].Visible ? Lskj.Main.Properties.Resources.node_default : Lskj.Main.Properties.Resources.node_select; - } - if (nodeValue.Length == ParentKeyLength * 2) - { - treeNode.btnTreeNode.BackgroundImage = _dicTreeNodes[nodeValue][0].Visible ? Lskj.Main.Properties.Resources.node2_default : Lskj.Main.Properties.Resources.node2_select; - } - // 末节点 - if (nodeValue.Length == ParentKeyLength * 3) - { - treeNode.btnTreeNode.BackgroundImage = Lskj.Main.Properties.Resources.node3_select; - if (!string.IsNullOrEmpty(_lastMenuId) && _lastMenuId != treeNode.btnTreeNode.Name) - { - _dicButtons[_lastMenuId].BackgroundImage = Lskj.Main.Properties.Resources.node3_default; - } - _lastMenuId = treeNode.btnTreeNode.Name; - } - List treeNodes = new List(); + int nodeLevel = GetVisualNodeLevel(nodeValue); + bool hasChildNodes = HasChildNodes(nodeValue); + List treeNodes = new List(); // 展开当前点击节点 - if (_dicTreeNodes.ContainsKey(nodeValue)) + if (hasChildNodes && AllowNodeCollapse) { treeNodes = _dicTreeNodes[nodeValue]; foreach (TreeNodeCustom node in treeNodes) { string menuKey = node.Tag + ""; - if (menuKey.Length == ParentKeyLength) continue; - node.Visible = !node.Visible; - Application.DoEvents();// 处理当前消息队列中的所有windows消息 + if (menuKey.Length <= nodeValue.Length) continue; + SetNodeVisibleState(node, !GetNodeVisibleState(node)); + } + ReflowTreeNodes(); + if (!RaiseClickEventOnAllNodes) + { + if (HasVisibleChildNodes(nodeValue)) + { + SetNodeSelectImage(treeNode.btnTreeNode, nodeLevel); + } + else + { + SetNodeDefaultImage(treeNode.btnTreeNode, nodeLevel); + } } } // 点击根节点隐藏所有子节点 - if (nodeValue.Length == ParentKeyLength && !_dicTreeNodes[nodeValue][0].Visible) + if (AllowNodeCollapse && nodeValue.Length == ParentKeyLength && !HasVisibleChildNodes(nodeValue)) { treeNodes = getChildNodes(nodeValue); foreach (TreeNodeCustom node in treeNodes) { - node.Visible = false; + SetNodeVisibleState(node, false); //Application.DoEvents();// 处理当前消息队列中的所有windows消息 } + ReflowTreeNodes(); } // 点击末节点 - if (nodeValue.Length == ParentKeyLength * 3) + if (RaiseClickEventOnAllNodes || nodeValue.Length == ParentKeyLength * 3) { - if (OnButtonClickEvent != null) - { - this.OnButtonClickEvent(treeNode.btnTreeNode); - } + TriggerNodeEvent(treeNode.btnTreeNode, nodeValue); } _lastTreeNode = nodeValue; } @@ -303,15 +642,34 @@ namespace Lskj.Main.Control TreeNodeCustom treeNode = button.Parent as TreeNodeCustom; string treeNodeTag = treeNode.Tag + ""; - if (treeNodeTag.Length == ParentKeyLength) + int nodeLevel = GetVisualNodeLevel(treeNodeTag); + if (SwitchOnMouseMove && button.Name != _lastMenuId) { + TriggerNodeEvent(button, treeNodeTag); + if (!UseGroupTreeImageStyle) + { + SetNodeMoveImage(button, nodeLevel); + } + return; } - else if (treeNodeTag.Length == ParentKeyLength * 2) + + if (button.Name == _lastMenuId) + { + return; + } + + if (UseGroupTreeImageStyle) + { + SetNodeMoveImage(button, nodeLevel); + return; + } + + if (nodeLevel == 2) { // 第一级节点 - if (_dicTreeNodes.ContainsKey(treeNodeTag) && _dicTreeNodes[treeNodeTag].Count > 0) + if (HasChildNodes(treeNodeTag)) { - button.BackgroundImage = _dicTreeNodes[treeNodeTag][0].Visible ? Lskj.Main.Properties.Resources.node2_select : Lskj.Main.Properties.Resources.node2_move; + button.BackgroundImage = HasVisibleChildNodes(treeNodeTag) ? Lskj.Main.Properties.Resources.node2_select : Lskj.Main.Properties.Resources.node2_move; } else { @@ -321,10 +679,7 @@ namespace Lskj.Main.Control else { // 末节点 - if (button.Name != _lastMenuId) - { - button.BackgroundImage = Lskj.Main.Properties.Resources.node3_move; - } + SetNodeMoveImage(button, nodeLevel); } } @@ -353,15 +708,24 @@ namespace Lskj.Main.Control TreeNodeCustom treeNode = button.Parent as TreeNodeCustom; string treeNodeTag = treeNode.Tag + ""; - if (treeNodeTag.Length == ParentKeyLength) + int nodeLevel = GetVisualNodeLevel(treeNodeTag); + if (button.Name == _lastMenuId) { + return; } - else if (treeNodeTag.Length == ParentKeyLength * 2) + + if (UseGroupTreeImageStyle) + { + SetNodeDefaultImage(button, nodeLevel); + return; + } + + if (nodeLevel == 2) { // 第一级节点 - if (_dicTreeNodes.ContainsKey(treeNodeTag) && _dicTreeNodes[treeNodeTag].Count > 0) + if (HasChildNodes(treeNodeTag)) { - button.BackgroundImage = _dicTreeNodes[treeNodeTag][0].Visible ? Lskj.Main.Properties.Resources.node2_select : Lskj.Main.Properties.Resources.node2_default; + button.BackgroundImage = HasVisibleChildNodes(treeNodeTag) ? Lskj.Main.Properties.Resources.node2_select : Lskj.Main.Properties.Resources.node2_default; } else { @@ -371,10 +735,7 @@ namespace Lskj.Main.Control else { // 末节点 - if (button.Name != _lastMenuId) - { - button.BackgroundImage = Lskj.Main.Properties.Resources.node3_default; - } + SetNodeDefaultImage(button, nodeLevel); } } @@ -414,5 +775,5 @@ namespace Lskj.Main.Control return treeNodes; } } - + }