2012-06-23 1 views
3

화면에 텍스트 레이아웃을 지정할 수있는 코드를 완성하려고합니다.GDI + MeasureString() 잘못 텍스트 바꿈

string[] s = new string[] { "Sample text ", "to test", " this layout ", "algorithm" }; 
PointF[] pts = new PointF[s.Length]; 
PointF start = new PointF(10, 10); 
StringFormat f = new StringFormat(StringFormat.GenericTypographic); 
float x = start.X; 
float y = start.Y; 
for (int i = 0; i < pts.Length; i++) 
{ 
    pts[i] = new PointF(x, y); 
    SizeF sz = e.Graphics.MeasureString(s[i], Font, pts[i], f); 
    x += sz.Width; 
    e.Graphics.DrawString(s[i], Font, Brushes.Black, pts[i]); 
} 

그것은 이전과 s 배열에있는 텍스트의 각 조각 후 공백을 트리밍을 제외하고 제대로 작동 : 그렇지 않으면 빈 윈도우 폼의 Paint 이벤트 처리기에 배치 다음 C# 코드는 예입니다. 이 레이아웃 알고리즘을

을 테스트

샘플 텍스트를하지만 대신은 다음과 같이 나타납니다 : 그것은 다음과 같이 표시되어야합니다

샘플 textto testthis layoutalgorithm

내가 가진 f.Trimming 속성이 None으로 설정되어 있음을 확인했습니다. 문자열의 측정에 후행 공백을 추가 할 것으로 추측했지만, 여전히 공백을 제거합니다. MeasureString 메서드를 만드는 방법에 대한 아이디어는 공백을 포함합니까? 달리 커닝은 완벽하게 처리됩니다.

답변

14
StringFormat f = new StringFormat(StringFormat.GenericTypographic) 
        { FormatFlags = StringFormatFlags.MeasureTrailingSpaces }; 
+0

완벽! 그게 내가 필요한 것입니다. 감사. – user1476997