C#WinForm应用程序中TreeView控件失去焦点后,仍然高亮显示被选中的节点

    xiaoxiao2023-10-03  180

    方法一:

    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、失去焦点时设置选中节点的颜色信息

    2、选中新节点之前,恢复当前选中的节点的颜色信息

    //失去焦点时 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; } }

     

     

    最新回复(0)