2014-10-08 4 views
2

긴 문자열 (~ 100k 문자)이 있습니다. 이 문자열의 길이를 알아야합니다. 나는TextRenderer.MeasureText() 및 텍스트 상자 최대 텍스트 길이

Size s = TextRenderer.MeasureText(graphics, text, font); 

전화 그러나 폭이 텍스트의 길이가 < = 43679는 올바른 값을 반환하는 경우에만 7. 동일 반환!

또한 텍스트 상자에 텍스트를 삽입하면 텍스트가 텍스트 상자에 표시되지 않습니다. 마우스로 텍스트를 선택하고 "Ctrl + C"를 통해 복사 할 수 있지만 텍스트는 표시되지 않습니다. MaxLength 속성이 텍스트 길이 이상입니다.

msdn을 살펴 보았지만 MeasureText 및 TextBox에 사용 된 최대 텍스트 길이에 대한 정보를 찾지 못했습니다.

어디서이 문서를 찾을 수 있습니까? 최대 텍스트 길이를 늘릴 수있는 방법이 있습니까? 이 값은 운영 체제 및 컴퓨터 성능에 따라 좌우됩니까?

+0

, 그것은 윈도우 버그입니다. 이런 종류의 미친 짓 할 때 존재하는 종류. 해결 방법은 매우 명확합니다. 문자열에 1000자를 넘는 문자열이 포함되어 있으면 문자열이 얼마나 넓은 지 신경 쓰지 않아도 결코 맞지 않습니다. –

답변

0

, 측정 문자열이 코드를 사용하여도, 심지어 작은 것들과 측정에 문자열을 분할 한 후 긴 문자열과 함께 모두 StringBuilder를 사용하려고

protected int _MeasureDisplayStringWidth (Graphics graphics, string text, Font font) 
{ 
    if (text == "") 
     return 0; 

    StringFormat format = new StringFormat (StringFormat.GenericDefault); 
    RectangleF rect = new RectangleF (0, 0, 1000, 1000); 
    CharacterRange[] ranges = { new CharacterRange (0, text.Length) }; 
    Region[] regions = new Region[1]; 

    format.SetMeasurableCharacterRanges (ranges); 
    format.FormatFlags = StringFormatFlags.MeasureTrailingSpaces; 

    regions = graphics.MeasureCharacterRanges (text, font, rect, format); 
    rect = regions[0].GetBounds (graphics); 

    return (int)(rect.Right); 
} 

신용 후 다른

problem with TextRenderer.MeasureText 정확한있는 TextRenderer 밤은 시도 이들을 함께 더한다.

+0

작동하지 않습니다. graphics.MeasureCharacterRanges (text, font, rect, format) throw ""GDI +에서 일반적인 오류가 발생했습니다. " 텍스트 길이가 긴 예외 (예 : 100,000 자) – Nikolay

0

유사한 예가 Here으로 주어졌다. 또한 그들은 maxLength 문제를 msdn

에 처리했습니다. 중요 : 기사에서 MaxLength가 어떻게 사용되는지보십시오. 내가 전에이 문제 들었어요

private static void DrawALineOfText(PaintEventArgs e) 
{ 
    // Declare strings to render on the form. 
    string[] stringsToPaint = { "Tail", "Spin", " Toys" }; 

    // Declare fonts for rendering the strings. 
    Font[] fonts = { new Font("Arial", 14, FontStyle.Regular), 
     new Font("Arial", 14, FontStyle.Italic), 
     new Font("Arial", 14, FontStyle.Regular) }; 

    Point startPoint = new Point(10, 10); 

    // Set TextFormatFlags to no padding so strings are drawn together. 
    TextFormatFlags flags = TextFormatFlags.NoPadding; 

    // Declare a proposed size with dimensions set to the maximum integer value. 
    Size proposedSize = new Size(int.MaxValue, int.MaxValue); 

    // Measure each string with its font and NoPadding value and 
    // draw it to the form. 
    for (int i = 0; i < stringsToPaint.Length; i++) 
    { 
     Size size = TextRenderer.MeasureText(e.Graphics, stringsToPaint[i], 
      fonts[i], proposedSize, flags); 
     Rectangle rect = new Rectangle(startPoint, size); 
     TextRenderer.DrawText(e.Graphics, stringsToPaint[i], fonts[i], 
      startPoint, Color.Black, flags); 
     startPoint.X += size.Width; 
    } 

} 

Source

+0

이 코드를 보았습니다. TextRenderer.MeasureText()가 텍스트가 길 때 왜 작동하지 않는지 설명하지 않습니다. – Nikolay