Код: Выделить всё
using System.Drawing;
namespace TreeViewEx
{
public partial class Form1 : Form
{
private bool DoColor = false;
private List ColoredNodes = new();
private Color myColor = SystemColors.HighlightText;
private Color myBackColor = Color.Black;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// tv is the TreeView control on Form1
tv.HideSelection = false;
tv.DrawMode = TreeViewDrawMode.OwnerDrawText;
tv.DrawNode += tv_DrawNode!;
}
private static Color GetContrastColor(Color color)
{
return (color.R * 0.299M) + (color.G * 0.587M) + (color.B * 0.114M) > 149 ?
SystemColors.WindowText :
SystemColors.Window;
}
private void ColorAncestors()
{
foreach (var anode in ColoredNodes)
{
anode.ForeColor = SystemColors.WindowText;
anode.BackColor = SystemColors.Window;
}
ColoredNodes.Clear();
if (!DoColor) { return; }
var node = tv.SelectedNode;
while (node.Parent != null)
{
node = node.Parent;
node.ForeColor = myColor;
node.BackColor = myBackColor;
ColoredNodes.Add(node);
}
}
private void tv_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
if (e.Node == null) return;
var selected = (e.State & TreeNodeStates.Selected) == TreeNodeStates.Selected;
var unfocused = !e.Node.TreeView.Focused;
if (selected && unfocused)
{
using var font = e.Node.NodeFont ?? e.Node.TreeView.Font;
e.Graphics.FillRectangle(SystemBrushes.Highlight, e.Bounds);
TextRenderer.DrawText(e.Graphics, e.Node.Text, font, e.Bounds,
SystemColors.HighlightText, TextFormatFlags.GlyphOverhangPadding);
}
else
{
e.DrawDefault = true;
}
}
// cbOwnerDraw is a checkbox on Form1
private void cbOwnerDraw_CheckedChanged(object sender, EventArgs e)
{
tv.DrawMode = cbOwnerDraw.Checked ?
TreeViewDrawMode.OwnerDrawText : TreeViewDrawMode.Normal;
}
}
}
< /code>
Я все искал для любого объяснения для этого, но я прихожу пустым. Мое ожидание состоит в том, что любые узлы, которые явно не нарисованы в обработчике событий (передачи в систему через e.drawdefault = true Подробнее здесь: https://stackoverflow.com/questions/794 ... -ownerdraw
Мобильная версия