节点是xml动态加载的,当鼠标点一个节点后,被点的节点默认背景是蓝色,还有下划线,很不好看,请问如何更改?我想要的效果是:鼠标移动到某个节点上,那个节点无背景,无下划线,只是颜色变成橙色,移走鼠标颜色还原默认设置;鼠标点击一个节点,被点击节点还是无背景无下划线,文字变橙色。点击另一个节点后,这个节点的颜色又还原成默认设置搜索了很多资料也没找到解决办法,求助。

解决方案 »

  1.   

    用鼠标那个事件,, 来改变颜色,当光标放在字上 是一个颜色, 移开 恢复。好像是cellmouseclick什么种的一个。 看你要什么效果 就用cellmouse...
      

  2.   

    除非重写treeview控件或在treeview的onpain事件中改写。
      

  3.   

    用treeView1_NodeMouseClick以及treeView1_NodeMouseHover  这2个事件不能实现吗?
      

  4.   

    翻遍baidu和google,都没找到答案,难道这个问题很难解决吗?
      

  5.   

    通过NodeMouseEnter或NodeMouseHover、NodeMouseClick修改如下属性:
    TreeNode.BackColor 背景色
    TreeNode.ForeColor 前景色
    TreeNode.NodeFont 字体(字体名,大小,样式)
      

  6.   

    通过TreeView的相关NodeMouse事件传递的EventArgs e获得当前的节点,如e.Node这样就可以得到当前鼠标停留或单击的节点,再修改相关属性
      

  7.   

    找到办法了,网上搜索的代码修改了下就ok了。写出来好给需要的人用
    用系统的默认事件不好用,需要重新绘制,先将treeview的DrawMode属性设置为OwnerDrawText,如果不设置下面的代码就没用了。
    然后再在DrawNode事件里这样写基本就能实现了private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e)
            {
                Color foreColor;
                Color backColor;
                if ((e.State & TreeNodeStates.Selected) > 0)
                {
                    foreColor = Color.OrangeRed;//鼠标点击节点时文字颜色
                    backColor = Color.DimGray;//鼠标点击节点时背景颜色
                }
                else if ((e.State & TreeNodeStates.Hot) > 0)
                {
                    foreColor = Color.Green;//鼠标经过时文字颜色
                    backColor =Color.DarkGray;//鼠标经过时背景颜色
                }
                else
                {
                    foreColor = this.treeView1.ForeColor;
                    backColor = this.treeView1.BackColor;
                }            e.Graphics.FillRectangle(new SolidBrush(backColor), new Rectangle(e.Bounds.Location, new Size(this.treeView1.Width - e.Bounds.X, e.Bounds.Height)));
                e.Graphics.DrawString(e.Node.Text, this.treeView1.Font, new SolidBrush(foreColor), e.Bounds);        }