treeview如何实现鼠标经过节点效果? 如QQ...鼠标放在一个人员处都会有个透明的蓝色背景。设置treeview的节点背景颜色不好使效果不好。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用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; 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); } 是指各个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); } treeview的初始化 我已经给部分treenode节点的字体加过颜色了。我想要保持住。treeView1_DrawNode 这事件差不多能实现了,右边是都有颜色了,但简单左边还是没颜色..(节点都带有图标) 我已经给部分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))); 这样填充了整个区域,路径的线条,以及小+号和你的图标都用自己画上去。 乱写的 不知道是不是这个意思 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差不多,估计只能用他说的:用 e.Graphics.FillRectangle(new SolidBrush(backColor), new Rectangle(new Point(0,e.Bounds.Y), new Size(this.treeView1.Width , e.Bounds.Height))); 这样填充了整个区域,路径的线条,以及小+号和你的图标都用自己画上去。 这方法我看行。 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))); 明华读卡器问题 C# 怎么读取便携设备里的文件 请问怎么删除自己的资源 c# 控件停靠窗体 using System 为什么一用它就出错??? google的那道数1的面试题,欢迎大家讨论。可以加分。 急:请教如何往oracle数据库中的时间类型字段传空值! 为什么调用地图不成功 SharpZipLib 组件在哪儿下载?(要绝对能下的链接地址)只要能下,分可以再加! matlab2013a deploytool 不能生成com组件 asp.NET,设置cookies失效时间不起作用,关闭浏览器就自动失效了?? 这段啥意思?详细解答一下
{
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;
{
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); }
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);
}
treeView1_DrawNode 这事件差不多能实现了,右边是都有颜色了,但简单左边还是没颜色..(节点都带有图标)
我已经给部分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)));
这样填充了整个区域,路径的线条,以及小+号和你的图标都用自己画上去。
{
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
{ }
}
}
估计只能用他说的:
用 e.Graphics.FillRectangle(new SolidBrush(backColor), new Rectangle(new Point(0,e.Bounds.Y), new Size(this.treeView1.Width , e.Bounds.Height)));
这样填充了整个区域,路径的线条,以及小+号和你的图标都用自己画上去。
这方法我看行。
_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)));