TreeView的自定义绘制图标处理

      Treeview是一个很常用的Winform控件,它提供了结合复选框和图标的展示方式,而且有上下级节点的缩进,在开发中很方便实用。通常在使用中,通过指定一个图标列表控件(ImageList),把要填充的所有节点图标都放到该控件中,把Treeview的ImageList属性指向它,然后在程序中根据节点数据来指定对应的图标序号(或者名称),可以方便地实现图标的动态切换。但有时,节点的图标不是固定的,可能是程序中动态生成的,比如常见的颜色设置和GIS图例等功能,需要实时刷新节点的颜色和图案,显然,并不能把所有的节点图片预先存储在ImageList中,该怎么办呢?幸好,Treeview控件为我们提供了自定义绘制的接口。

  下面结合着以前写的一个图例控件,说明一下自定义绘制时的用法和要点,在此做个抛砖引玉。

  首先,要实现自定义绘制,需要设置Treeview.DrawMode属性,来指明绘制模式:

  Treeview.DrawMode = TreeViewDrawMode.OwnerDrawText;  //自定义绘制节点的文本和图标

  或

  Treeview.DrawMode = TreeViewDrawMode.OwnerDrawAll;  //自定义绘制节点的全部(包括节点虚线和复选框,以及节点展开和收缩时的+-号)

  在通常情况下,我们只需要绘制图标和文本就行,虚线和复选框由系统绘制,以下示例即采用TreeViewDrawMode.OwnerDrawText模式。

  其次,设置了绘制模式之后,需要实现节点绘制事件Treeview.DrawNode,该事件仅当 DrawMode 属性设置为 OwnerDrawAll 或 OwnerDrawText 的 TreeViewDrawMode 值时,才引发。另外,该事件是在绘制每一个节点时都触发,并非针对所有节点。

  该事件的声明为:public delegate void DrawTreeNodeEventHandler (Object sender,DrawTreeNodeEventArgs e),其中参数DrawTreeNodeEventArgs中包含了当前要绘制的节点对象,以及该节点的范围坐标等信息。

  在实现该方法时,主要负责处理两个事情:绘制图标和绘制文本,绘制的方法依靠参数DrawTreeNodeEventArgs中的Graphics对象句柄。示例代码如下:

 
  
1 /// <summary>
2 /// 自己绘制节点图标和文字
3 /// </summary>
4 ///
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值