因需求需要,现在要做一个类似于记事本里面的“自动换行”的功能。
我的控件是第三方表格控件,单元格宽度单位是float,字体大小单位也是float
比如我现在有 string cTxt="asdhah是fks的合肥市控件的控件的和发神经和dfjdhfdjhf东方航空是经的回复";
这样一串字符串,想要在表格控件的单元格显示。
如何做到自动换行。
我的思路:根据字体和字符串算出实际长度,用float表示,与单元格宽度对比,得到有多少行,然后根据宽度float值对字符串进行截取,得到对应字符。
现在面临问题:
1,字符串如何转换成float表示?
2,知道float长度之后,如何对字符串转换截取?
上面思路是我想的,那位朋友有更好的办法可以提出,大家一起探讨。(拉动单元格字符串长度跟着变不考虑,宽度固定。)
我的控件是第三方表格控件,单元格宽度单位是float,字体大小单位也是float
比如我现在有 string cTxt="asdhah是fks的合肥市控件的控件的和发神经和dfjdhfdjhf东方航空是经的回复";
这样一串字符串,想要在表格控件的单元格显示。
如何做到自动换行。
我的思路:根据字体和字符串算出实际长度,用float表示,与单元格宽度对比,得到有多少行,然后根据宽度float值对字符串进行截取,得到对应字符。
现在面临问题:
1,字符串如何转换成float表示?
2,知道float长度之后,如何对字符串转换截取?
上面思路是我想的,那位朋友有更好的办法可以提出,大家一起探讨。(拉动单元格字符串长度跟着变不考虑,宽度固定。)
截取的话 ,可以将字符串后边加特殊符号 ,然后根据特殊符号截取就ok了
Graphics g = this.RichTextBox1.CreateGraphics();
float charSize = e.Graphics.MeasureString("上", this.RichTextBox1.Font);
正常情况:
列宽:60.0
字体:宋体,Size 9.0
中文4个,英文小写9个,英文大写9个
string txt="要显示的文本";
Graphics g = this.CreateGraphics();
SizeF strSize = g.MeasureString(txt,Font);对字符串转换截取:SubString中文最宽,
先计算一个中文的宽度: SizeF charSize = g.MeasureString("中",Font); 最少多少个字符 n = 单元格宽度/ charSize.Width ;循环 提取 for(;n<txt.length;n++)提取出字符串,计算长度。如果 n 个字符时,长度小于等于单元格宽度
n+1 个字符时,长度大于单元格宽度那么就取前n 个字符,删除前n个字符
循环以上操作
方法二: float 类型变量 =convert.Tostring(字符串);