int TextAreaHeight = (int)g.MeasureString(strAll, this.Font, TextAreaWidth).Height;
当字符串很长很长(>5M)时, MeasureString就死掉了。我想计算出strAll所占的高度,怎么解决这个问题?或者其他更好的办法?

解决方案 »

  1.   

    我是想做个看小说的工具,用graphics.drawstring,测试的时候开了个5M的就死掉了暂时还没有别的思路。
      

  2.   

    那就是另一个故事了:)
    如果需要确定页数,是需要做一个索引的。
    索引的key为当前的页码,value为第几个字符。
    这同样不需要所有的字符的长度。这也是为什么一般的阅读器在第一次打开某个文本的时候需要有一个初始化的功能。
      

  3.   

    因为数据的高度是固定的,因此5M长的数据和2个字符的数据高度一样.
    int TextAreaHeight = (int)g.MeasureString(strAll.SubString(1, 2), this.Font, TextAreaWidth).Height;
      

  4.   

    我是这么做的, 先计算出所有的字符所需的矩形,然后在这个矩形上drawstring,autoscroll=true, 再通过移动坐标系,实现滚动。如果几十k的数据,不会有什么问题,但是数据大了就会溢出,甚至死在MeasureString里。
    你那么只能确定一个字符的高度,不能满足我的需求。
      

  5.   


    1.首先我要确定总页数,当然要知道所有字符的长度了。
    2.浏览器窗口的大小是可以变化的, 就是说,总页数和当前页不是固定的。
    3.对于你说的索引,我的理解是:<确定每页能显示多少个字符,再确定当前字符所在的页。> 
      但这是否会受到换行符的影响呢? 如果存在换行符,那么每页能显示的字符就不能确定了吧。