c# – 禁用TreeView Node Focus Cue
发布时间:2020-12-15 22:02:08 所属栏目:百科 来源:网络整理
导读:我想知道如何在WinForms TreeView上禁用节点焦点矩形,我已经尝试过处理AfterSelect但是选择以及FocusCues仍然会出现一秒钟然后消失 码 public class CustomTreeView : TreeView{ protected override void OnDrawNode(DrawTreeNodeEventArgs e) { e.DrawDefau
我想知道如何在WinForms TreeView上禁用节点焦点矩形,我已经尝试过处理AfterSelect但是选择以及FocusCues仍然会出现一秒钟然后消失
码 public class CustomTreeView : TreeView { protected override void OnDrawNode(DrawTreeNodeEventArgs e) { e.DrawDefault = true; base.OnDrawNode(e); } protected override void OnAfterSelect(TreeViewEventArgs e) { SelectedNode = null; base.OnAfterSelect(e); } } 解决方法
我为你创建了一个示例类.它继承自TreeView类并引入了新属性DrawElements.默认情况下,重点是rect&选择已启用.要禁用某些元素,请调整DrawElements属性的值.要禁用它们,请将其值设置为0.
[Flags] public enum TreeViewDrawElements { FocusRect = 1,Selection = 2 } public sealed class MyTreeView : TreeView { public MyTreeView() { DrawMode = TreeViewDrawMode.OwnerDrawText; DrawElements = TreeViewDrawElements.FocusRect | TreeViewDrawElements.Selection; } [DefaultValue(TreeViewDrawElements.FocusRect | TreeViewDrawElements.Selection)] public TreeViewDrawElements DrawElements { get; set; } protected override void OnDrawNode(DrawTreeNodeEventArgs e) { base.OnDrawNode(e); if (DrawElements == (TreeViewDrawElements.FocusRect | TreeViewDrawElements.Selection)) { e.DrawDefault = true; return; } TreeNode node = e.Node; Rectangle bounds = node.Bounds; Graphics g = e.Graphics; Size textSize = TextRenderer.MeasureText(node.Text,node.TreeView.Font); Point textLoc = new Point(bounds.X - 1,bounds.Y); // required to center the text bounds = new Rectangle(textLoc,new Size(textSize.Width,bounds.Height)); Font font = node.NodeFont ?? node.TreeView.Font; bool selected = (DrawElements & TreeViewDrawElements.Selection) != 0 && (e.State & TreeNodeStates.Selected) == TreeNodeStates.Selected; Color color = (selected && node.TreeView.Focused) ? SystemColors.HighlightText : (node.ForeColor != Color.Empty) ? node.ForeColor : node.TreeView.ForeColor; g.FillRectangle(selected ? SystemBrushes.Highlight : SystemBrushes.Window,bounds); if ((DrawElements & TreeViewDrawElements.FocusRect) != 0 && (e.State & TreeNodeStates.Selected) != 0) ControlPaint.DrawFocusRectangle(g,bounds,color,SystemColors.Highlight); TextRenderer.DrawText(g,e.Node.Text,font,TextFormatFlags.Default); } } 用法示例: MyTreeView tree = new MyTreeView { DrawElements = TreeViewDrawElements.Selection }; tree.Nodes.Add("aaa"); tree.Nodes.Add("bbb"); tree.Nodes.Add("ccc"); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |