找回密码
 立即注册

QQ登录

只需一步,快速开始

xiechenming

注册会员

3

主题

11

帖子

107

积分

注册会员

积分
107

活字格认证

最新发帖
xiechenming
注册会员   /  发表于:2015-9-8 09:43  /   查看:11918  /  回复:14
准备获取一个文本单元格中获取最优高度,此单元格已设置为text类型,.multiline,wordwrap均是true.并且使用了columnspan。GetPreferredHeight方法好像不支持跨列呢。
请教如何在winform中实现文本单元格求最优高度。谢谢!

14 个回复

倒序浏览
rbgongming
论坛元老   /  发表于:2015-9-8 10:12:00
沙发
回复 1楼xiechenming的帖子

你好:
思想就是将每列的WordWrap设置我True,然后用Spread的EditModeOff事件去获取最优行高
测试代码如下,请参考:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  ' テキスト型セルを設定します
  Dim tcell As New FarPoint.Win.Spread.CellType.TextCellType()
  tcell.WordWrap = True
  FpSpread1.ActiveSheet.Columns(1).CellType = tcell
End Sub

Private Sub FpSpread1_EditModeOff(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FpSpread1.EditModeOff
  ' 最も高さのあるテキストの高さに設定します
  FpSpread1.ActiveSheet.Rows(0).Height = FpSpread1.ActiveSheet.GetPreferredRowHeight(0)
End Sub

评分

参与人数 1金币 +999 收起 理由
frank.zhang + 999 协助回答问题

查看全部评分

把简单的事做好就是不简单,
把平凡的事做好就是不平凡。
回复 使用道具 举报
xiechenming
注册会员   /  发表于:2015-9-8 11:21:00
板凳
尝试过了,还是不行。
单元格内的文本是初始化生成的,不需要编辑,委托用不上啊



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
rbgongming
论坛元老   /  发表于:2015-9-8 11:32:00
地板
回复 3楼xiechenming的帖子

你在赋值之后加上如下代码
FpSpread1.ActiveSheet.Rows(0).Height = FpSpread1.ActiveSheet.GetPreferredRowHeight(0)
如果你的Spread只是只读的,不会对其收入力的话,那个EditModeOff时间就不需要写了
把简单的事做好就是不简单,
把平凡的事做好就是不平凡。
回复 使用道具 举报
xiechenming
注册会员   /  发表于:2015-9-8 11:44:00
5#
补充了代码,效果就是图2的效果,第一行高度被拉开了,但是明显不对
回复 使用道具 举报
rbgongming
论坛元老   /  发表于:2015-9-8 13:00:00
6#
回复 5楼xiechenming的帖子

你好,我测试过的,是可以的,感觉你在代码哪里有重新设置了行高,
或者是哪个属性引起的,可否上传一下你的再现Demo。
把简单的事做好就是不简单,
把平凡的事做好就是不平凡。
回复 使用道具 举报
xiechenming
注册会员   /  发表于:2015-9-8 14:19:00
7#
截图里就是demo啊,难道不是columspan的原因?我感觉获取最优的行高是按一列宽度的单元格文本进行计算高度的。
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-9-8 14:45:00
8#
您好,
我使用以下代码,没有能够重现问题,您看下是否遗漏了关键的步骤
  1.             fpSpread1.ActiveSheet.Cells[0, 0].Text = "测试";
  2.             fpSpread1.ActiveSheet.Cells[0,1].ColumnSpan = 4;
  3.             fpSpread1.ActiveSheet.Cells[0, 1].Text = "很长很长\n很长很长很长\n很长很长很长很长很长很\n长很长很长很长长很长很长很长长很长很长很长";
  4.             MaxNum = 12;

  5.             FarPoint.Win.Spread.CellType.EnhancedColumnHeaderRenderer ecr = new FarPoint.Win.Spread.CellType.EnhancedColumnHeaderRenderer();
  6.             ecr.WordWrap = true;
  7.             fpSpread1.ActiveSheet.ColumnHeader.DefaultStyle.Renderer = ecr;
  8.         }

  9.         private void button1_Click(object sender, EventArgs e)
  10.         {
  11.             /**
  12.             float len_txt = 0;
  13.             for (int i = 0; i < MaxNum; i++)
  14.             {
  15.                 len_txt = fpSpread1.ActiveSheet.GetPreferredColumnWidth(i);
  16.                 fpSpread1.ActiveSheet.Columns[i].Width = len_txt;
  17.             }
  18.              * */
  19.             float len_txt = 0;
  20.             for (int i = 0; i < MaxNum; i++)
  21.             {
  22.                 len_txt = fpSpread1.ActiveSheet.GetPreferredRowHeight(i);
  23.                 fpSpread1.ActiveSheet.Rows[i].Height = len_txt;
  24.             }
  25.         }
复制代码









另外,我测试的版本是最新8.1,不知道您的版本是多少?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
xiechenming
注册会员   /  发表于:2015-9-8 15:30:00
9#
的确可以了。
采用示例中的EnhancedColumnHeaderRenderer类就可以。为什么使用时是设置列头的样式重绘呢,可以对单元格进行类似重绘达到同样目的吗?
谢谢!
回复 使用道具 举报
xiechenming
注册会员   /  发表于:2015-9-8 15:45:00
10#
用EnhancedColumnHeaderRenderer设置样式后,单元格内容必须加换行符,否则显示不全内容,怎么办呢?
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部