roger.wang 发表于 2014-5-16 11:31:00

使用LineShape画线

问题描述:使用 Spread制作交叉报表时,需要在单元格中画对角线实现复合表头的功能。
问题解答:可以使用GetCellRectangle方法来获取单元格所在矩形,进而绘制线。
关键代码:

      ///<summary>
      ///通过计算单元格的长度和宽度来计算 LineShape 的起始位置和角度
      ///</summary>
      ///<param name="startRowIndex">起始行</param>
      ///<param name="startColIndex">起始列</param>
      ///<param name="endRowIndex">结束行</param>
      ///<param name="endColIndex">结束列</param>
      ///<returns>返回 LineShape 所在矩形</returns>
      private Rectangle CaculateRectangle(int startRowIndex, int startColIndex, int endRowIndex, int endColIndex)
      {
            float height = 0;
            float width = 0;
            for (int i = startRowIndex; i <= endRowIndex; i++)
            {
                height += this.fpSpread1.Sheets.Rows.Height;
            }

            for (int i = startColIndex; i <= endColIndex; i++)
            {
                width += this.fpSpread1.Sheets.Columns.Width;
            }
            Rectangle cellRec = this.fpSpread1.GetCellRectangle(0, 0, startRowIndex, startColIndex);
            Point startPositoin = new Point(cellRec.Left -             (int)this.fpSpread1.Sheets.SheetCorner.Columns.Width, cellRec.Top - (int)this.fpSpread1.Sheets.SheetCorner.Rows.Height);

            Rectangle rec = newRectangle(startPositoin, newSize((int)width, (int)height));
            return rec;
      }


效果截图:


示例下载:点击下载

刘君 发表于 2016-11-2 08:52:49

请问一下每个表单的线条(或形状)是否有一个集合,可能通过代码访问这个集合?

dexteryao 发表于 2016-11-2 17:49:45

在对应专区已回复
页: [1]
查看完整版本: 使用LineShape画线