Spread 图文混排单元格类型实现方法之一

Spread for WinForms 中提供了 TextCellType 和 ImageCellType 两种单元格类型,可分别用于文字和图片类型的单元格,不过有时也希望在单元格中同时显示文字和图片,今天就使用自定义单元格类型来实现图文混排效果。

发布于 2013/01/22 00:00

Spread for WinForms 中提供了 TextCellType 和 ImageCellType 两种单元格类型,可分别用于文字和图片类型的单元格,不过有时也希望在单元格中同时显示文字和图片,今天就使用自定义单元格类型来实现图文混排效果。

首先,我们需要从 ImageCellType 继承实现一个自定义单元格类型 ImageTextCellType,并重写 PaintCell 方法,代码如下:

    public class ImageTextCellType : FarPoint.Win.Spread.CellType.ImageCellType
    {
        private Picture picture;

        public ImageTextCellType()
        {
            picture = new Picture();
        }

        public override void PaintCell(Graphics g, Rectangle r, FarPoint.Win.Spread.Appearance appearance, object value, bool isSelected, bool isLocked, float zoomFactor)
        {
            if (value != null)
            {
                Image image = value as Image;
                string strValue = image.Tag.ToString();//文字

                SolidBrush brush = new SolidBrush(Color.White);
                GraphicsState gstate = g.Save();
                g.IntersectClip(r);
                g.FillRectangle(brush, r);
                brush.Dispose();

                if (image != null)
                {
                    Rectangle rectangle = new Rectangle(new Point(r.X, r.Y), new Size(200, 200));
                    if (rectangle == Rectangle.Empty)
                    {
                        g.Restore(gstate);
                        return;
                    }
                    picture.Image = image;
                    picture.Paint(g, rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height);
                    SizeF size = g.MeasureString(strValue, appearance.Font);
                    g.DrawString(strValue, appearance.Font, new SolidBrush(Color.Black), new PointF(r.X, r.Y + image.Size.Height + 5));
                }
                g.Restore(gstate);
            }
            else
            {
                base.PaintCell(g, r, appearance, value, isSelected, isLocked, zoomFactor);
            }
        }
    }

 

接下来在Spread中使用 ImageTextCellType 单元格类型,代码如下:

    private void Form1_Load(object sender, EventArgs e)
    {
        ImageTextCellType itct = new ImageTextCellType();

        fpSpread1.ActiveSheet.Columns[0].CellType = itct;

        Image image = Image.FromFile(Application.StartupPath + @"\Images\八仙花.jpg");
        image.Tag = "八仙花";
        fpSpread1.ActiveSheet.Cells[0, 0].Value = image;

        image = Image.FromFile(Application.StartupPath + @"\Images\灯塔.jpg");
        image.Tag = "灯塔";
        fpSpread1.ActiveSheet.Cells[1, 0].Value = image;
    }

 

运行截图:

 

 

源码下载:

7719_ImageText.zip (196.07 kb)

关于葡萄城

葡萄城是专业的软件开发技术和低代码平台提供商,以“赋能开发者”为使命,致力于通过表格控件、低代码和BI等各类软件开发工具和服务,一站式满足开发者需求,帮助企业提升开发效率并创新开发模式。葡萄城开发技术始于1980年,40余年来始终聚焦软件开发技术,有深厚的技术积累和丰富的产品线。是业界能够同时赋能软件开发和低代码开发的企业。凭借过硬的产品能力、活跃的用户社区和丰富的伙伴生态,与超过3000家合作伙伴紧密合作,产品广泛应用于信息和软件服务、制造、交通运输、建筑、金融、能源、教育、公共管理等支柱产业。

推荐相关案例
推荐相关资源
关注微信
葡萄城社区二维码

关注“葡萄城社区”

加微信获取技术资讯

加微信获取技术资讯

想了解更多信息,请联系我们, 随时掌握技术资源和产品动态