From 0c89806af09a812c7af4d9d25553bf983cfbf877 Mon Sep 17 00:00:00 2001 From: Sunny Date: Sun, 15 May 2022 17:16:50 +0800 Subject: [PATCH] =?UTF-8?q?*=20UITreeView:=20=E5=A2=9E=E5=8A=A0=E4=BA=86?= =?UTF-8?q?=E7=82=B9=E5=87=BB=E6=96=87=E5=AD=97=E6=94=B9=E5=8F=98CheckBox?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E7=9A=84NodeClickChangeCheckBoxes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SunnyUI/Controls/UITreeView.cs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/SunnyUI/Controls/UITreeView.cs b/SunnyUI/Controls/UITreeView.cs index 26d152f8..4c54e6f7 100644 --- a/SunnyUI/Controls/UITreeView.cs +++ b/SunnyUI/Controls/UITreeView.cs @@ -26,6 +26,7 @@ * 2022-04-01: V3.1.2 增加水平滚动条 * 2022-04-01: V3.1.2 自定义行颜色,可通过代码给颜色值,SetNodePainter * 2022-05-15: V3.1.8 修复了一个设计期显示错误 + * 2022-05-15: V3.1.8 增加了点击文字改变CheckBox状态的NodeClickChangeCheckBoxes ******************************************************************************/ using System; @@ -127,6 +128,14 @@ namespace Sunny.UI set => view.TreeNodeStateSync = value; } + [Description("点击文字改变CheckBox状态"), Category("SunnyUI")] + [DefaultValue(false)] + public bool NodeClickChangeCheckBoxes + { + get => view.NodeClickChangeCheckBoxes; + set => view.NodeClickChangeCheckBoxes = value; + } + private void View_AfterLabelEdit(object sender, NodeLabelEditEventArgs e) { AfterLabelEdit?.Invoke(this, e); @@ -1168,6 +1177,27 @@ namespace Sunny.UI } } } + + public bool NodeClickChangeCheckBoxes { get; set; } + + protected override void OnNodeMouseClick(TreeNodeMouseClickEventArgs e) + { + base.OnNodeMouseClick(e); + if (CheckBoxes && NodeClickChangeCheckBoxes) + { + int drawLeft = e.Node.Bounds.X; + if (ImageList != null) + drawLeft -= ImageList.ImageSize.Width; + + if (e.Location.X > drawLeft) + { + e.Node.Checked = !e.Node.Checked; + DicNodeStatus[e.Node.GetHashCode()] = false; + SetChildNodeCheckedState(e.Node, e.Node.Checked); + SetParentNodeCheckedState(e.Node, true); + } + } + } } } } \ No newline at end of file