Как изменить цвет фона выбранного узла в TreeView, используя TreeViewDrawMode.OwnerDrawAll?
Мне нужно изменить задние цвета выбранных узлов, когда узел выбран и имеет фокус - задний цвет становится зеленым, когда выбран, но не имеет фокуса - красный. Я не могу сделать разницу между выбранным узлом с фокусом на древовидном представлении и без него. Древовидное представление находится в объекте TabPage.
//...
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);
}
1 ответ
Просто проверьте свойство узла, оно работает (проверено). Также я предлагаю кэшировать любые пользовательские кисти, которые вы создаете, как показано ниже.. (Конечно, вы также можете использовать Brushes.Red и 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);
}
PS Возможно, вам понадобится сделать что-то, что вы щелкнете, чтобы развернуть узлы и т.д.