2013-06-04 2 views
16

DrawString 함수가 전체 문자 나 단어를 반 직관적으로 잘라내는 방법을 찾았습니다. 텍스트의 일부분을 보여 주면 뭔가 빠졌음을 분명히 알 수 있습니다.트리밍없이 DrawString을 사용하려면 어떻게해야합니까?

StringTrimming.None가 : StringTrimming.Character

enter image description here : enter image description here

내가 원하는 무엇 : enter image description here

이 StringTrimming.None 제 (김프 모형)가 여기

은 몇 가지 예입니다 StringTrimming.Character와 동일합니까? 그들은 내 행동에있어서 똑같이 행동하는 것처럼 보입니다. 간과 할 수있는 것이 있거나 알려진 "기능"입니까?

에 따른 것 docs StringTrimming.None "트리밍을 지정하지 않습니다."

This site "Java"로 작성된 예제는 "문자"보다 많은 문자를 잘라 내기 위해 "없음"을 표시합니다.

다른 효과가 있나요?

참고 : "..."또는 유사하게 표시하고 싶지 않습니다. 이것이 공간의 낭비라고 생각하지만, 아마도 UX에 대한 토론 일 것입니다.

+0

죄송합니다 .. 단지 알고 싶어 .. 당신이이 적용 것인가? – matzone

+0

@Rotem 좋은 생각이지만, 수직 공간이 많이있는 경우 배치가 엉망이 될 것입니다. 그래도 대답으로 추가해야합니다. 그것은 단 하나 선을 위해 중대한 일한다! – Sarien

+0

@matzone DataGridView (Windows Forms에 익숙하지 않은 테이블). – Sarien

답변

9

실제로 텍스트가 보이지 않게 다음 줄로 감싸기 때문에 텍스트가 잘린 것처럼 보일 수 있습니다. Graphics.DrawString에 대한 호출에서, 그 FormatFlags 재산 NoWrap로 설정된 StringFormat 객체를 전달하여 포장을 해제 :

StringFormat format = 
    new StringFormat 
    { 
     FormatFlags = StringFormatFlags.NoWrap, 
     Trimming = StringTrimming.None 
    }; 
g.DrawString(s, font, brush, rect, format); 
+1

+1 나는 이런 일이있을 것이라고 생각합니다. –

+1

랩핑을 유지하고 어쨌든 다른 라인을위한 충분한 공간이 없을 때만 랩핑을 비활성화 할 수 있습니까?(나는 그것을하기 위해 모든 것을 측정 할 수 있었지만 그것을 피하고 싶습니다.) – Sarien

+1

@Sarien : 거기에는 깃발이없는 것 같습니다. 'if' 문이나'?'연산자를 사용하고, 그리기 직사각형의 높이가 선의 높이의 두 배보다 작 으면'NoWrap' 플래그를 전달해야합니다. –

4

해결 방법으로, 당신은 RectangleF 더 큰 당신이 정말로 원하는 것보다 DrawString 방법을 제공 할 수 있습니다, 당신은 문자열을 그리려 RectangleF 실제에 Graphics 개체의 클리핑 영역을 설정합니다.

RectangleF rect = new RectangleF(10, 10, 30, 15); 
e.Graphics.DrawRectangle(Pens.Red, Rectangle.Truncate(rect)); 

RectangleF fakeRect = new RectangleF(rect.Location, new SizeF(short.MaxValue, short.MaxValue)); 

Region r = e.Graphics.Clip; 
e.Graphics.SetClip(rect);    
e.Graphics.DrawString("1 Default", this.Font, SystemBrushes.ControlText, fakeRect); 
e.Graphics.Clip = r; 

이 코드는 텍스트를 사각형의 왼쪽 위 모서리에 고정하려고한다고 가정합니다. 그렇지 않으면 의도 한 레이아웃 사각형과 동일한 앵커 포인트를 유지하는 메서드에서 가짜 사각형을 생성해야합니다.

+0

이것이 가장 좋은 방법입니다. 'DrawString()'trim 옵션은 표시하기 전에 문자열을 조작하는 것에 관한 것입니다. 그러나 원하는 것은 모두 표시하고 클립하는 것입니다. – DonBoitnott

관련 문제