关于treeview节点颜色的几个问题

phuai007 2010-10-21 10:15:53
节点是xml动态加载的,当鼠标点一个节点后,被点的节点默认背景是蓝色,还有下划线,很不好看,请问如何更改?

我想要的效果是:鼠标移动到某个节点上,那个节点无背景,无下划线,只是颜色变成橙色,移走鼠标颜色还原默认设置;

鼠标点击一个节点,被点击节点还是无背景无下划线,文字变橙色。点击另一个节点后,这个节点的颜色又还原成默认设置

搜索了很多资料也没找到解决办法,求助。
...全文
217 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
phuai007 2010-10-21
  • 打赏
  • 举报
回复
找到办法了,网上搜索的代码修改了下就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);

}
nnzao 2010-10-21
  • 打赏
  • 举报
回复
通过TreeView的相关NodeMouse事件传递的EventArgs e获得当前的节点,如e.Node这样就可以得到当前鼠标停留或单击的节点,再修改相关属性
nnzao 2010-10-21
  • 打赏
  • 举报
回复
通过NodeMouseEnter或NodeMouseHover、NodeMouseClick修改如下属性:
TreeNode.BackColor 背景色
TreeNode.ForeColor 前景色
TreeNode.NodeFont 字体(字体名,大小,样式)
phuai007 2010-10-21
  • 打赏
  • 举报
回复
翻遍baidu和google,都没找到答案,难道这个问题很难解决吗?
phuai007 2010-10-21
  • 打赏
  • 举报
回复
用treeView1_NodeMouseClick以及treeView1_NodeMouseHover 这2个事件不能实现吗?
neatrain 2010-10-21
  • 打赏
  • 举报
回复
除非重写treeview控件或在treeview的onpain事件中改写。
zhengjianhua520 2010-10-21
  • 打赏
  • 举报
回复
用鼠标那个事件,, 来改变颜色,当光标放在字上 是一个颜色, 移开 恢复。好像是cellmouseclick什么种的一个。 看你要什么效果 就用cellmouse...

111,129

社区成员

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

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

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