因需求需要,现在要做一个类似于记事本里面的“自动换行”的功能。
我的控件是第三方表格控件,单元格宽度单位是float,字体大小单位也是float
比如我现在有 string cTxt="asdhah是fks的合肥市控件的控件的和发神经和dfjdhfdjhf东方航空是经的回复";
这样一串字符串,想要在表格控件的单元格显示。
如何做到自动换行。
我的思路:根据字体和字符串算出实际长度,用float表示,与单元格宽度对比,得到有多少行,然后根据宽度float值对字符串进行截取,得到对应字符。
现在面临问题:
1,字符串如何转换成float表示?
2,知道float长度之后,如何对字符串转换截取?
上面思路是我想的,那位朋友有更好的办法可以提出,大家一起探讨。(拉动单元格字符串长度跟着变不考虑,宽度固定。)

解决方案 »

  1.   

    Encoding 用这个转化 就ok了 。
    截取的话 ,可以将字符串后边加特殊符号 ,然后根据特殊符号截取就ok了
      

  2.   

    取汉字宽度
    Graphics g = this.RichTextBox1.CreateGraphics();
    float charSize = e.Graphics.MeasureString("上", this.RichTextBox1.Font);
      

  3.   

    但是我宽度不是固定的。
    正常情况:
    列宽:60.0
    字体:宋体,Size 9.0
    中文4个,英文小写9个,英文大写9个
      

  4.   

      ///字符串长度
    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个字符
    循环以上操作
      

  5.   

    为啥要用float,int 不可?
      

  6.   

    字符串转换成float的公式 :方法一: float 类型变量 = float.Parse(字符串);
    方法二: float 类型变量 =convert.Tostring(字符串);