treeview如何实现鼠标经过节点效果?

jieon 2009-12-16 02:06:41
如QQ...鼠标放在一个人员处都会有个透明的蓝色背景。
设置treeview的节点背景颜色不好使。。。效果不好。
...全文
584 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
江湖人儿 2012-03-27
  • 打赏
  • 举报
回复
问题解决了吗?
jieon 2009-12-16
  • 打赏
  • 举报
回复
嗯 我试试 这种方法节点会有抖动...是不得看双缓冲?
h_w_king 2009-12-16
  • 打赏
  • 举报
回复
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)));
jieon 2009-12-16
  • 打赏
  • 举报
回复
和 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)));
这样填充了整个区域,路径的线条,以及小+号和你的图标都用自己画上去。
这方法我看行。
jieon 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zgke 的回复:]
乱写的 不知道是不是这个意思

  private void treeView1_MouseMove(object sender, MouseEventArgs e)
        {
            TreeView _TreeView = (TreeView)sender;
            TreeNode _Node =  treeView1.GetNodeAt(e.X, e.Y);         
[/Quote]
晕,刚结贴了,行个话另开贴给加分
zgke 2009-12-16
  • 打赏
  • 举报
回复
乱写的 不知道是不是这个意思

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
{

}
}
}
h_w_king 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jieon 的回复:]
treeview的初始化 我已经给部分treenode节点的字体加过颜色了。我想要保持住。
treeView1_DrawNode 这事件差不多能实现了,右边是都有颜色了,但简单左边还是没颜色..(节点都带有图标)

[/Quote]

我已经给部分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)));
这样填充了整个区域,路径的线条,以及小+号和你的图标都用自己画上去。
jieon 2009-12-16
  • 打赏
  • 举报
回复
颜色已调整过来了,现在就是没有整个节点一行上色的效果
jieon 2009-12-16
  • 打赏
  • 举报
回复
treeview的初始化 我已经给部分treenode节点的字体加过颜色了。我想要保持住。
treeView1_DrawNode 这事件差不多能实现了,右边是都有颜色了,但简单左边还是没颜色..(节点都带有图标)
h_w_king 2009-12-16
  • 打赏
  • 举报
回复
是指各个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);
}
jieon 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 h_w_king 的回复:]

[/Quote]

老大,有没办法改变初始化时候设置的颜色字体不改变?
h_w_king 2009-12-16
  • 打赏
  • 举报
回复
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);

}
jieon 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 h_w_king 的回复:]
用treeView1_DrawNode画

private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e)
[/Quote]

有两问题,这方法把我初始化设置的颜色字体给覆盖了。。
2.为什么就节点处那么一点地方有背景,可以整行的吗?
h_w_king 2009-12-16
  • 打赏
  • 举报
回复
用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;

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧