如何使用TreeViewDrawMode.OwnerDrawAll改变选定节点的背景颜色的TreeView? [英] How to change background color of selected node in TreeView using TreeViewDrawMode.OwnerDrawAll?
问题描述
我要改回选择的节点,颜色时选择的节点和具有焦点 - 背景色进行绿色选择时,但没有焦点 - 红色。我不能让重点是树视图和没有选择的节点之间的差异。位于TabPage的对象树视图。
// ...
this.myTreeView.HideSelection = FALSE;
// ...
私人无效myTreeView_drawNode(对象发件人,DrawTreeNodeEventArgs E)
{
颜色backColorSelected = System.Drawing.Color.Green;
色背景色= System.Drawing.Color.Red;
//节点选择与具有焦点
如果(((e.State&安培;!TreeNodeStates.Selected)= 0)
&功放;&安培; (this.myTabControl.Focused))//这不工作,节点总是冲
{
使用(SolidBrush刷=新SolidBrush(backColorSelected))
{
e.Graphics.FillRectangle(刷,e.Bounds);
}
}
//选择的节点,但是没有焦点
否则如果((e.State&安培;!TreeNodeStates.Selected)= 0)
{
使用(SolidBrush刷=新SolidBrush(背景色))
{
e.Graphics.FillRectangle(刷,e.Bounds);
}
}
//没有选择可言
其他
{
e.Graphics.FillRectangle(Brushes.White,e.Bounds);
}
e.Graphics.DrawRectangle(SystemPens.Control,e.Bounds);
TextRenderer.DrawText(e.Graphics,
e.Node.Text,
e.Node.TreeView.Font,
e.Node.Bounds,
e.Node.ForeColor);
}
只要检查该节点的属性,它的工作原理(测试)。此外,我建议缓存任何自定义画笔,你喜欢做以下。(当然你也可以使用Brushes.Red和Brushes.Green)
SolidBrush greenBrush =新SolidBrush(Color.Green);
SolidBrush redBrush =新SolidBrush(Color.Red);
私人无效myTreeView_drawNode(对象发件人,DrawTreeNodeEventArgs E)
{
如果(e.Node.IsSelected)
{
如果(treeView1.Focused)
e.Graphics.FillRectangle(greenBrush,e.Bounds);
其他
e.Graphics.FillRectangle(redBrush,e.Bounds);
}
其他
e.Graphics.FillRectangle(Brushes.White,e.Bounds);
e.Graphics.DrawRectangle(SystemPens.Control,e.Bounds);
TextRenderer.DrawText(e.Graphics,
e.Node.Text,
e.Node.TreeView.Font,
e.Node.Bounds,
e.Node.ForeColor);
}
P.S。你可能需要渲染你单击展开节点等东西。
I need to change back colours of selected nodes, when node selected and has focus - back color make green, when selected but doesn't have focus - red. I can't make the difference between selected node with focus on tree view and without. Tree view located in TabPage object.
//...
this.myTreeView.HideSelection = false;
//...
private void myTreeView_drawNode(object sender, DrawTreeNodeEventArgs e)
{
Color backColorSelected = System.Drawing.Color.Green;
Color backColor = System.Drawing.Color.Red;
// node selected and has focus
if (((e.State & TreeNodeStates.Selected) != 0)
&& (this.myTabControl.Focused)) // this doesn't work, node is always red
{
using (SolidBrush brush = new SolidBrush(backColorSelected))
{
e.Graphics.FillRectangle(brush, e.Bounds);
}
}
// node selected but doesn't have focus
else if ((e.State & TreeNodeStates.Selected) != 0)
{
using (SolidBrush brush = new SolidBrush(backColor))
{
e.Graphics.FillRectangle(brush, e.Bounds);
}
}
// not selected at all
else
{
e.Graphics.FillRectangle(Brushes.White, e.Bounds);
}
e.Graphics.DrawRectangle(SystemPens.Control, e.Bounds);
TextRenderer.DrawText(e.Graphics,
e.Node.Text,
e.Node.TreeView.Font,
e.Node.Bounds,
e.Node.ForeColor);
}
Just check the node's property, it works (tested). Also I suggest caching any custom brushes you make like the following.. (Of course you can also use Brushes.Red and Brushes.Green)
SolidBrush greenBrush = new SolidBrush(Color.Green);
SolidBrush redBrush = new SolidBrush(Color.Red);
private void myTreeView_drawNode(object sender, DrawTreeNodeEventArgs e)
{
if (e.Node.IsSelected)
{
if (treeView1.Focused)
e.Graphics.FillRectangle(greenBrush, e.Bounds);
else
e.Graphics.FillRectangle(redBrush, e.Bounds);
}
else
e.Graphics.FillRectangle(Brushes.White, e.Bounds);
e.Graphics.DrawRectangle(SystemPens.Control, e.Bounds);
TextRenderer.DrawText(e.Graphics,
e.Node.Text,
e.Node.TreeView.Font,
e.Node.Bounds,
e.Node.ForeColor);
}
P.S. You'll probably need to render something that you click to expand nodes etc.
这篇关于如何使用TreeViewDrawMode.OwnerDrawAll改变选定节点的背景颜色的TreeView?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!