方法一:
1、設定TreeView的DrawMode為.OwnerDrawText
2、綁定DrawNode事件為上面的事件函數
private void init()
{
this.treeView1.HideSelection = false;//失去焦點後不隐藏選中節點
//自已繪制
this.treeView1.DrawMode = TreeViewDrawMode.OwnerDrawText;
this.treeView1.DrawNode += new DrawTreeNodeEventHandler(treeView1_DrawNode);
}
3、定義DrawNode事件函數
如果隻是希望失去焦點後仍然有預設的高亮效果,隻須設定DrawDefault = true即可:
private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
e.DrawDefault = true; //使用預設顔色,隻需要在TreeView失去焦點時選中節點仍然突顯
return;
}
如果想自定義高亮顔色,則需進行如下設定:
private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
// 自定義顔色
if (e.State == TreeNodeStates.Selected)
{
//示範為紅底白字
e.Graphics.FillRectangle(Brushes.DarkRed, e.Node.Bounds);
Font nodeFont = e.Node.NodeFont;
if (nodeFont == null) nodeFont = ((TreeView)sender).Font;
e.Graphics.DrawString(e.Node.Text, nodeFont, Brushes.White, Rectangle.Inflate(e.Bounds, 2, 0));
}
else
{
e.DrawDefault = true;
}
if (e.State == TreeNodeStates.Focused)
{
using (Pen focusPen = new Pen(Color.Black))
{
focusPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
Rectangle focusBounds = e.Node.Bounds;
focusBounds.Size = new Size(focusBounds.Width - 1,
focusBounds.Height - 1);
e.Graphics.DrawRectangle(focusPen, focusBounds);
}
}
}
方法二:
1、失去焦點時設定選中節點的顔色資訊
//失去焦點時
private void treeView1_Leave(object sender, EventArgs e)
{
if(treeView1.SelectedNode!=null)
{
//讓選中項背景色呈現紅色
treeView1.SelectedNode.BackColor = Color.Red;
//前景色為白色
treeView1.SelectedNode.ForeColor = Color.White;
}
}
//将要選中新節點之前發生
private void treeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e)
{
if (treeView1.SelectedNode != null)
{
//将上一個選中的節點背景色還原(原先沒有顔色)
treeView1.SelectedNode.BackColor = Color.Empty;
//還原前景色
treeView1.SelectedNode.ForeColor = Color.Black;
}
}