找回密码
 立即注册

QQ登录

只需一步,快速开始

bingdaoice

中级会员

44

主题

208

帖子

608

积分

中级会员

积分
608
bingdaoice
中级会员   /  发表于:2020-7-10 10:03  /   查看:2924  /  回复:1
1金币
请问如何通过代码的方式,做到换行与缩小同时使用?
例如:单元格的值为:ABCDEFGHIJKLMN
我想先用换行的方式判断单元格是否能完整显示内容。
如果换行了都不能完整显示,那么就缩小一点字体。然后再判断,再缩小。直至能完全显示内容。

能给一个例子吗?

最佳答案

查看完整内容

这里有一个自动缩小字体自动换行的例子,逻辑是先缩小,到一定程度后再换行 如果是直接强制换行再缩小字体的话,这个最终文字实际就是多行了,文字缩小后等于说要重新排列文字,功能实现很困难 可以自定义一个CellType继承TextCellType,重写PaintCell方法 调用办法

1 个回复

倒序浏览
最佳答案
最佳答案
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-7-10 10:03:55
来自 2#
这里有一个自动缩小字体自动换行的例子,逻辑是先缩小,到一定程度后再换行
如果是直接强制换行再缩小字体的话,这个最终文字实际就是多行了,文字缩小后等于说要重新排列文字,功能实现很困难



可以自定义一个CellType继承TextCellType,重写PaintCell方法

  1. private class CTextCellType : FarPoint.Win.Spread.CellType.TextCellType
  2.         {            
  3.             
  4.             public override void PaintCell(Graphics g, Rectangle r, FarPoint.Win.Spread.Appearance appearance, object value, bool isSelected, bool isLocked, float zoomFactor)
  5.             {
  6.                 if (value != null)
  7.                 {
  8.                     System.Drawing.Font font = appearance.Font;

  9.                     while (g.MeasureString(value.ToString(),font).Width >= r.Width && font.Size >= 5)
  10.                     {
  11.                         font = new System.Drawing.Font(font.FontFamily, font.Size - 0.5f, font.Style);
  12.                     }
  13.                     
  14.                     appearance.Font = font;
  15.                 }

  16.                 base.PaintCell(g, r, appearance, value, isSelected, isLocked, zoomFactor);
  17.             }
  18.         }
复制代码



调用办法
  1.             CTextCellType ctc = new CTextCellType();
  2.             ctc.Multiline = true;
  3.             ctc.WordWrap = true;
  4.             fpSpread1.ActiveSheet.Columns[0].CellType = ctc;
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部