利用CustomDrawNodeCell 的DrawImage重绘小图标
要求:基于在treeList控件实现如下要求:
1.TreeListNode的Cell加小图标
这样的需求应该很多,个人觉得是比较简单的,不多说直接上代码:
private TreeListColumn statusClumn;
private System.Windows.Forms.ImageList imageList;
void treeList1_CustomDrawNodeCell(object sender, CustomDrawNodeCellEventArgs e)
{
if(e.Column.FieldName != statusClumn.FieldName )
{
return;
}
//从imageList拿到下标为的图片对象
Image image = imageList.Images[0];
//绘制坐标设置XY和高宽
Rectangle rectangle = new Rectangle(e.Bounds.X + 5, e.Bounds.Y + (e.Bounds.Height - image.Height) / 2, image.Width, image.Height)
//执行绘制方法
e.Cache.Graphics.DrawImage(image, rectangle );
//将重绘前的背景色再次绘制上去
e.Cache.FillRectangle(e.Appearance.GetBackBrush(e.Cache), e.Bounds);
//将重绘前的文字样式再次绘制上去
e.Cache.DrawString(e.CellText, e.Appearance.Font, e.Appearance.GetForeBrush(e.Cache), e.Bounds, e.Appearance.GetStringFormat());
//标记执行处理,一旦为true,底层会抹除statusClumn的样式效果,因此需重新设置FillRectangle和DrawString信息
e.Handled = true;
}
2.鼠标悬停时改变小图标
在CustomDrawNodeCell事件中无法获取到鼠标是否悬停,那么我们可以通过获取悬停背景色确定是否悬停,如代码所示&