diff --git a/插件库/Lskj.Main/Control/MainPanelControlEx.cs b/插件库/Lskj.Main/Control/MainPanelControlEx.cs index 590ea38..8d98d52 100644 --- a/插件库/Lskj.Main/Control/MainPanelControlEx.cs +++ b/插件库/Lskj.Main/Control/MainPanelControlEx.cs @@ -142,6 +142,7 @@ namespace Lskj.Main.Control private const int GroupControlTopPadding = 8; private static readonly Color LeftGroupTreeBackgroundColor = Color.FromArgb(39, 45, 81); private static readonly Color LeftGroupTreeActiveColor = Color.FromArgb(52, 142, 216); + private static readonly Color LeftGroupTreeHoverColor = Color.FromArgb(79, 101, 132); private static readonly Color LeftGroupTreeTextColor = Color.FromArgb(235, 255, 255, 255); private static readonly Color LeftGroupTreeArrowColor = Color.FromArgb(173, 255, 255, 255); @@ -774,8 +775,10 @@ namespace Lskj.Main.Control _leftGroupTreeView.Columns.Add(textColumn); _leftGroupTreeView.OptionsBehavior.Editable = false; + _leftGroupTreeView.OptionsBehavior.AutoNodeHeight = false; _leftGroupTreeView.OptionsSelection.EnableAppearanceFocusedCell = false; _leftGroupTreeView.OptionsSelection.EnableAppearanceFocusedRow = true; + _leftGroupTreeView.OptionsSelection.MultiSelect = true; _leftGroupTreeView.OptionsView.AutoWidth = true; _leftGroupTreeView.OptionsView.ExpandButtonCentered = true; _leftGroupTreeView.OptionsView.ShowButtons = false; @@ -802,10 +805,15 @@ namespace Lskj.Main.Control _leftGroupTreeView.Appearance.HideSelectionRow.ForeColor = Color.White; _leftGroupTreeView.Appearance.HideSelectionRow.Options.UseBackColor = true; _leftGroupTreeView.Appearance.HideSelectionRow.Options.UseForeColor = true; + _leftGroupTreeView.Appearance.SelectedRow.BackColor = LeftGroupTreeHoverColor; + _leftGroupTreeView.Appearance.SelectedRow.ForeColor = Color.White; + _leftGroupTreeView.Appearance.SelectedRow.Options.UseBackColor = true; + _leftGroupTreeView.Appearance.SelectedRow.Options.UseForeColor = true; _leftGroupTreeView.SelectImageList = GetLeftGroupTreeImageList(); _leftGroupTreeView.AfterCollapse += OnLeftGroupTreeListAfterExpandOrCollapse; _leftGroupTreeView.AfterExpand += OnLeftGroupTreeListAfterExpandOrCollapse; + _leftGroupTreeView.CalcNodeHeight += OnLeftGroupTreeListCalcNodeHeight; _leftGroupTreeView.MouseClick += OnLeftGroupTreeListMouseClick; _leftGroupTreeView.MouseLeave += OnLeftGroupTreeListMouseLeave; _leftGroupTreeView.MouseMove += OnLeftGroupTreeListMouseMove; @@ -883,6 +891,12 @@ namespace Lskj.Main.Control UpdateLeftGroupTreeNodeArrow(e == null ? null : e.Node); } + private void OnLeftGroupTreeListCalcNodeHeight(object sender, CalcNodeHeightEventArgs e) + { + if (e == null || e.Node == null) return; + e.NodeHeight = ScaleLeftGroupTreeMetric(e.Node.Level == 0 ? 44 : 36); + } + private void UpdateLeftGroupTreeNodeArrow(TreeListNode node) { if (node == null || node.Level != 0) return; @@ -900,8 +914,16 @@ namespace Lskj.Main.Control TreeListNode hotNode = hitInfo == null ? null : hitInfo.Node; if (hotNode == _leftGroupHotNode) return; + if (_leftGroupHotNode != null && _leftGroupHotNode != _leftGroupSelectedNode) + { + _leftGroupHotNode.Selected = false; + } _leftGroupHotNode = hotNode; - treeList.FocusedNode = _leftGroupHotNode ?? _leftGroupSelectedNode; + if (_leftGroupHotNode != null && _leftGroupHotNode != _leftGroupSelectedNode) + { + _leftGroupHotNode.Selected = true; + } + treeList.Invalidate(); } private void OnLeftGroupTreeListMouseLeave(object sender, EventArgs e) @@ -909,11 +931,17 @@ namespace Lskj.Main.Control TreeList treeList = sender as TreeList; if (treeList == null) return; + if (_leftGroupHotNode != null && _leftGroupHotNode != _leftGroupSelectedNode) + { + _leftGroupHotNode.Selected = false; + } _leftGroupHotNode = null; if (_leftGroupSelectedNode != null) { + _leftGroupSelectedNode.Selected = true; treeList.FocusedNode = _leftGroupSelectedNode; } + treeList.Invalidate(); } private Panel GetLeftGroupSeparator() @@ -1011,6 +1039,7 @@ namespace Lskj.Main.Control if (!string.IsNullOrEmpty(defaultNode) && nodeMap.ContainsKey(defaultNode)) { _leftGroupSelectedNode = nodeMap[defaultNode]; + _leftGroupSelectedNode.Selected = true; treeList.FocusedNode = _leftGroupSelectedNode; } } @@ -1030,8 +1059,19 @@ namespace Lskj.Main.Control TreeListHitInfo hitInfo = treeList.CalcHitInfo(e.Location); if (hitInfo == null || hitInfo.Node == null) return; + if (_leftGroupHotNode != null && _leftGroupHotNode != hitInfo.Node) + { + _leftGroupHotNode.Selected = false; + } + if (_leftGroupSelectedNode != null && _leftGroupSelectedNode != hitInfo.Node) + { + _leftGroupSelectedNode.Selected = false; + } _leftGroupSelectedNode = hitInfo.Node; + _leftGroupHotNode = hitInfo.Node; + _leftGroupSelectedNode.Selected = true; treeList.FocusedNode = _leftGroupSelectedNode; + treeList.Invalidate(); if (hitInfo.Node.HasChildren && hitInfo.HitInfoType != HitInfoType.Button) { hitInfo.Node.Expanded = !hitInfo.Node.Expanded;