如QQ...鼠标放在一个人员处都会有个透明的蓝色背景。
设置treeview的节点背景颜色不好使效果不好。

解决方案 »

  1.   

    用treeView1_DrawNode画private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e)
            {
                Color foreColor;
                Color backColor;
                if ((e.State & TreeNodeStates.Selected )> 0)
                {
                    foreColor = Color.White;
                    backColor = SystemColors.ActiveCaption;
                }
                else if ((e.State & TreeNodeStates.Hot)>0)
                {
                    foreColor = Color.Black;
                    backColor = Color.GreenYellow;
                }
                else
                {
                    foreColor = Color.Black;
                    backColor = Color.White;
                }          
                e.Graphics.FillRectangle(new SolidBrush(backColor), e.Bounds);
                e.Graphics.DrawString(e.Node.Text, this.treeView1.Font, new SolidBrush(foreColor), e.Bounds);        }
    并设置
     this.treeView1.DrawMode = System.Windows.Forms.TreeViewDrawMode.OwnerDrawText;
      this.treeView1.HotTracking = true;
      

  2.   

     private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e)
            {
                Color foreColor;
                Color backColor;
                if ((e.State & TreeNodeStates.Selected) > 0)
                {
                    foreColor = Color.White;
                    backColor = SystemColors.ActiveCaption;
                }
                else if ((e.State & TreeNodeStates.Hot) > 0)
                {
                    foreColor = this.treeView1.ForeColor;
                    backColor = Color.GreenYellow;
                }
                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);         }
      

  3.   

    是指各个treenode的颜色和字体吗? 还是treeview的初始化设置?
     private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e)
            {
                Color foreColor;
                Color backColor;
                if ((e.State & TreeNodeStates.Selected) > 0)
                {
                    foreColor = Color.White;
                    backColor = SystemColors.ActiveCaption;
                }
                else if ((e.State & TreeNodeStates.Hot) > 0)
                {
                    foreColor = e.Node.ForeColor;  //用该node的forecolor.
                    backColor = Color.GreenYellow;
                }
                else
                {
                    foreColor = e.Node.ForeColor;
                    backColor = Color.White;
                }
                e.Graphics.FillRectangle(new SolidBrush(backColor), new Rectangle(e.Bounds.Location, new Size(this.treeView1.Width - e.Bounds.X, e.Bounds.Height)));
                if (e.Node.NodeFont != null)
                    e.Graphics.DrawString(e.Node.Text, e.Node.NodeFont, new SolidBrush(foreColor), e.Bounds);
                else                e.Graphics.DrawString(e.Node.Text, this.treeView1.Font, new SolidBrush(foreColor), e.Bounds);
            }
      

  4.   

    treeview的初始化 我已经给部分treenode节点的字体加过颜色了。我想要保持住。
    treeView1_DrawNode 这事件差不多能实现了,右边是都有颜色了,但简单左边还是没颜色..(节点都带有图标)
      

  5.   


    我已经给部分treenode节点的字体加过颜色了。我想要保持住:
    可以用e.Node.ForeColor;右边是都有颜色了,但简单左边还是没颜色..(节点都带有图标):
     没有现成的方法,
     用 e.Graphics.FillRectangle(new SolidBrush(backColor), new Rectangle(new Point(0,e.Bounds.Y), new Size(this.treeView1.Width , e.Bounds.Height)));
      这样填充了整个区域,路径的线条,以及小+号和你的图标都用自己画上去。 
      

  6.   

    乱写的 不知道是不是这个意思  private void treeView1_MouseMove(object sender, MouseEventArgs e)
            {
                TreeView _TreeView = (TreeView)sender;
                TreeNode _Node =  treeView1.GetNodeAt(e.X, e.Y);
                           if (_Node != null)
                {
                    if (_TreeView.Tag == null ||  !_TreeView.Tag.Equals(_Node))
                    {
                        _TreeView.Refresh();
                        Graphics _Graphics = Graphics.FromHwnd(_TreeView.Handle);
                        _Graphics.FillRectangle(new SolidBrush(Color.FromArgb(100, 0, 0, 255)), _Node.Bounds);
                        _Graphics.Dispose();
                        _TreeView.Tag = _Node;
                    }
                    else
                    {                }
                }
            }
      

  7.   

    和 h_w_king差不多,
    估计只能用他说的:
    用 e.Graphics.FillRectangle(new SolidBrush(backColor), new Rectangle(new Point(0,e.Bounds.Y), new Size(this.treeView1.Width , e.Bounds.Height))); 
     这样填充了整个区域,路径的线条,以及小+号和你的图标都用自己画上去。 
    这方法我看行。
      

  8.   

    9楼的方法是在node上加上一块半透明的色块,改一下可能可呢满足lz的要求.
     _Graphics.FillRectangle(new SolidBrush(Color.FromArgb(100, 0, 0, 255)), new Rectangle(new Point(0, _Node.Bounds.Y), new Size(this.treeView1.Width, _Node.Bounds.Height)));