博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DataGridView图像文本单元格
阅读量:4145 次
发布时间:2019-05-25

本文共 3993 字,大约阅读时间需要 13 分钟。

为了美观,有时候我们需要文本单元格中带有图标,然而微软自带的DataGridView控件中没有类似的控件。下面的示例就是实现这样的一个控件。在文本前显示图像,显示出的图像如果太大,效果不好看,可以结合之前写过的,自己加以修改整合。

 

部分代码:

public class TextAndImageColumn : DataGridViewTextBoxColumn    {        private Image imageValue;        private Size imageSize;        public TextAndImageColumn()        {            this.CellTemplate = new TextAndImageCell();        }        public override object Clone()        {            TextAndImageColumn c = base.Clone() as TextAndImageColumn;            c.imageValue = this.imageValue;            c.imageSize = this.imageSize;            return c;        }        public Image Image        {            get { return this.imageValue; }            set            {                if (this.Image != value)                {                    this.imageValue = value;                    this.imageSize = value.Size;                    if (this.InheritedStyle != null)                    {                        Padding inheritedPadding = this.InheritedStyle.Padding;                        this.DefaultCellStyle.Padding = new Padding(imageSize.Width,                            inheritedPadding.Top, inheritedPadding.Right,                            inheritedPadding.Bottom);                    }                }            }        }        private TextAndImageCell TextAndImageCellTemplate        {            get { return this.CellTemplate as TextAndImageCell; }        }        internal Size ImageSize        {            get { return imageSize; }        }    }    public class TextAndImageCell : DataGridViewTextBoxCell    {        private Image imageValue;        private Size imageSize;        public override object Clone()        {            TextAndImageCell c = base.Clone() as TextAndImageCell;            c.imageValue = this.imageValue;            c.imageSize = this.imageSize;            return c;        }        public Image Image        {            get            {                if (this.OwningColumn == null || this.OwningTextAndImageColumn == null)                {                    return imageValue;                }                else if (this.imageValue != null)                {                    return this.imageValue;                }                else                {                    return this.OwningTextAndImageColumn.Image;                }            }            set            {                if (this.imageValue != value)                {                    this.imageValue = value;                    this.imageSize = value.Size;                    Padding inheritedPadding = this.InheritedStyle.Padding;                    this.Style.Padding = new Padding(imageSize.Width,                        inheritedPadding.Top, inheritedPadding.Right,                        inheritedPadding.Bottom);                }            }        }        protected override void Paint(Graphics graphics, Rectangle clipBounds,            Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState,            object value, object formattedValue, string errorText,            DataGridViewCellStyle cellStyle,            DataGridViewAdvancedBorderStyle advancedBorderStyle,            DataGridViewPaintParts paintParts)        {            // Paint the base content            base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState,                value, formattedValue, errorText, cellStyle,                advancedBorderStyle, paintParts);            if (this.Image != null)            {                // Draw the image clipped to the cell.                System.Drawing.Drawing2D.GraphicsContainer container =                graphics.BeginContainer();                graphics.SetClip(cellBounds);                graphics.DrawImageUnscaled(this.Image, cellBounds.Location);                graphics.EndContainer(container);            }        }        private TextAndImageColumn OwningTextAndImageColumn        {            get { return this.OwningColumn as TextAndImageColumn; }        }    }

 

 

 

转载请注明出处!!!

 

你可能感兴趣的文章
Unity 2D教程 | 骨骼动画:介绍
查看>>
Unity 2D教程 | 骨骼动画:创建动画
查看>>
Unity断言库
查看>>
Unity着色器教程 | 积雪效果
查看>>
手把手教你在Unity中实现小地图
查看>>
Unity 动态加载Animator Event 事件
查看>>
Unity中的时间控制 - 关卡创建
查看>>
Unity中的时间控制 - 时间倒退
查看>>
Unity开发小技巧介绍
查看>>
揭开AssetBundle庐山真面目(一)(二)
查看>>
那些你与AssetBundle的爱与恨...
查看>>
你应该知道的AssetBundle管理机制(内存管理较适合于Unity 5.3之前的版本)
查看>>
Unity3D 5.X 新版AssetBundle使用方案及策略
查看>>
Assetbundle相关问题及使用优化技巧
查看>>
给调皮的AssetBundle加上面向对象式加载调试管理
查看>>
设计模式从零到一 之六大原则
查看>>
设计模式之一:单例模式
查看>>
设计模式之二:工厂方法模式
查看>>
设计模式之三:抽象工厂模式
查看>>
设计模式之四:模板方法模式
查看>>