当前位置: 首页 > 编程语言 > C#

TreeViewowner使用ownerdrawtext绘制,点击节点时使用怪异的黑色高亮share

时间:2023-04-10 10:50:20 C#

C#:TreeViewowner使用ownerdrawtext绘制,点击节点时使用怪异我将DrawMode设置为OwnerDrawText并添加到DrawNode事件中,添加了我的代码以按照我想要的方式绘制文本,并且一切正常,除了一些奇怪的黑色选项用于在选择节点时突出显示。没问题,我添加了逻辑来检查节点的状态是否突出显示并绘制了我自己的突出显示,除了在单击节点时添加黑色突出显示,而不仅仅是选择...一旦鼠标按钮突出显示我的矩形突出显示释放但确实被吸引和眨眼……这很烦人。:/显然我忘了实际问我的问题......如何在不完全处理绘图的情况下删除选择?根据我的经验,你通常不能。要么自己画,要么不画。如果您尝试在控件绘制的图形之上合成图形,最终会出现故障。这有点痛苦,因为您必须自己处理焦点矩形、选择突出显示并绘制所有字形。从好的方面来说,视觉样式可用于完成大部分工作。这是一些可以为您完成大部分工作的代码(它是不完整的,因为它使用了一些未包含的方法,并且它不能正确呈现普通树视图的功能,因为它支持渐变填充的项目和列,但它应该是方便参考)以上是C#学习教程:C#:TreeViewowner使用ownerdrawtext绘制,点击节点时用奇怪的黑色高亮分享的全部内容,如果对大家有用需要了解更多关于C#我希望你会更多地关注教程—protectedvirtualvoidOnDrawTreeNode(objectsender,DrawTreeNodeEventArgse){stringtext=e.Node.Text;矩形itemRect=e.Bounds;if(e.Bounds.Height=0;iLine--){if(testNode.NextNode!=null){x=(iLine*cIndentBy)+(cMargin*2);e.Graphics.DrawLine(dotPen,x,itemRect.Top,x,itemRect.Bottom);}testNode=testNode.Parent;}x=(e.Node.Level*cIndentBy)+cTwoMargins;e.Graphics.DrawLine(dotPen,x,itemRect.Top,x,midY);}e.Graphics.DrawLine(dotPen,iconLeft+cMargin,midY,iconLeft+cMargin+10,midY);}//如果需要,绘制展开(加/减)图标if(ShowPlusMinus&&e.Node.Nodes.Count>0){//使用VisualStyles渲染器使用正确的操作系统定义的字形RectangleexpandRect=newRectangle(iconLeft-1、年中-7、16、16);VisualStyleElement元素=(e.Node.IsExpanded)?VisualStyleElement.TreeView.Glyph.Opened:VisualStyleElement.TreeView.Glyph.Closed;VisualStyleRenderer渲染器=newVisualStyleRenderer(元素);renderer.DrawBackground(e.Graphics,expandRect);}//绘制文本,由|分隔成列字符点textStartPos=newPoint(itemRect.Left+textLeft,itemRect.Top);PointtextPos=newPoint(textStartPos.X,textStartPos.Y);字体textFont=e.Node.NodeFont;//为这个控件获取项目的字体,或者失败,如果(textFont==null)textFont=Font;StringFormatdrawFormat=newStringFormat();drawFormat.Alignment=StringAlignment.Near;drawFormat.LineAlignment=StringAlignment.Center;drawFormat.FormatFlags=StringFormatFlags.NoWrap;string[]columnTextList=text.Split('|');for(intiCol=0;iCol本文搜集自网络,不代表立场,如涉及侵权,请点击右侧联系管理员删除,如需转载请注明出处: