c# treeview 怎么在子节点前添加多个图标

liuoomei 2016-07-25 08:55:30

类似与图片上这种,有大神帮忙解答下吗,万分感谢
...全文
456 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
assky124 2016-07-26
  • 打赏
  • 举报
回复 1


public partial class Form5 : Form
{
private TreeView _treeView = new TreeView();

public Form5()
{
InitializeComponent();
_treeView.Dock = DockStyle.Fill;
_treeView.DrawMode = TreeViewDrawMode.OwnerDrawText;
_treeView.DrawNode += new DrawTreeNodeEventHandler(_treeView_DrawNode);
this.SuspendLayout();
this.Controls.Add(_treeView);
this.ResumeLayout();
CreateNodes();
}

void _treeView_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
var treeItem = e.Node.Tag as TreeItem;
if(treeItem == null || treeItem.icons.Count == 0)
{
e.Graphics.DrawString(e.Node.Text,_treeView.Font, Brushes.Black, e.Bounds);
}
else
{
int l = e.Bounds.Left;
int t = e.Bounds.Top;
int h = e.Bounds.Height;
foreach(var img in treeItem.icons)
{
var rect = new Rectangle(l, t, h, h);
e.Graphics.DrawImage(img, rect);
l += h;
}
e.Graphics.DrawString(e.Node.Text, _treeView.Font, Brushes.Black,
new Rectangle(l + 3 ,t,e.Bounds.Width - (l- e.Bounds.Left) + 3,h));
}
}

private void CreateNodes()
{
var item1 = new TreeItem();
item1.text = "Node1";
item1.icons.Add(this.Icon.ToBitmap());
var node1 = CreateNode(item1);
_treeView.Nodes.Add(node1);

var item2 = new TreeItem();
item2.text = "Node2";
item2.icons.Add(this.Icon.ToBitmap());
item2.icons.Add(this.Icon.ToBitmap());
var node2 = CreateNode(item2);
_treeView.Nodes.Add(node2);
}

private TreeNode CreateNode(TreeItem item)
{
var node = new TreeNode();
//扩大下Node所属的Bounds 图标会占据一定的空间
node.Text = item.text.PadRight(item.text.Length + 3*item.icons.Count);
node.Tag = item;
return node;
}

private class TreeItem
{
public string text;
public List<Image> icons = new List<Image>();
}
}
liuoomei 2016-07-25
  • 打赏
  • 举报
回复
引用 3 楼 assky124 的回复:
Web Win? Web简单,生成HTML的时候插入img Win 可以自绘
可以具体点怎么重绘这个控件吗,刚做winform没多久
liuoomei 2016-07-25
  • 打赏
  • 举报
回复
引用 1 楼 liuoomei 的回复:
在线等,很急啊
子节点很多,都是从数据库读出来的,没发手动一个个添加自定义控件,之前用imagelist发现只能添加一个图标
liuoomei 2016-07-25
  • 打赏
  • 举报
回复
winform,子节点很多,都是从数据库读出来的,没发手动一个个添加自定义控件,之前用imagelist发现只能添加一个图标
assky124 2016-07-25
  • 打赏
  • 举报
回复
Web Win? Web简单,生成HTML的时候插入img Win 可以自绘
  • 打赏
  • 举报
回复
每个节点你都可以用一个自定义控件,自定义控件里面你放多张图片就可以。
liuoomei 2016-07-25
  • 打赏
  • 举报
回复
在线等,很急啊

110,535

社区成员

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

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

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