Tuesday, September 28, 2010

TreeView lost focus

public partial class Form1 : Form {


public Form1() {

InitializeComponent();

treeView1.Nodes.Add("abc");

treeView1.Nodes.Add("bcd");

treeView1.Nodes[1].Nodes.Add("ppo");

treeView1.DrawMode = TreeViewDrawMode.OwnerDrawText;

treeView1.DrawNode += treeView1_DrawNode;

}

private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e) {

Font f = e.Node.NodeFont != null ? e.Node.NodeFont : e.Node.TreeView.Font;

Size sz = TextRenderer.MeasureText(e.Node.Text, f);

Rectangle rc = new Rectangle(e.Bounds.X - 1, e.Bounds.Y, sz.Width + 2, e.Bounds.Height);

Color fore = e.Node.ForeColor;

if (fore == Color.Empty) fore = e.Node.TreeView.ForeColor;

// Have to indicate focus somehow, how about yellow foreground text?

if (e.Node == e.Node.TreeView.SelectedNode) {

fore = SystemColors.HighlightText;

if ((e.State & TreeNodeStates.Focused) != 0) fore = Color.Yellow;

}

Color back = e.Node.BackColor;

if (back == Color.Empty) back = e.Node.TreeView.BackColor;

if (e.Node == e.Node.TreeView.SelectedNode) back = SystemColors.Highlight;

SolidBrush bbr = new SolidBrush(back);

e.Graphics.FillRectangle(bbr, rc);

TextRenderer.DrawText(e.Graphics, e.Node.Text, f, rc, fore, TextFormatFlags.GlyphOverhangPadding);

bbr.Dispose();

No comments:

Post a Comment