2010-08-02 5 views
2

서식 창이있는 서식있는 텍스트로 표를 표시해야합니다. 그것은 단지 두 개의 열 테이블이므로 탭 기능은 RTF 테이블을 지원하지 않기 때문에 모든 라인을 잘 처리합니다 (RichTextBox는 RTF 테이블을 지원하지 않기 때문에). 그러나 고정되지 않은 너비 글꼴로 인해 탭 중지가 잘못된 경우가 있습니다.컨트롤을 측정하지 않고 VB.net에서 글꼴 너비 가져 오기?

그래서 모든 글꼴이 정렬되도록 특정 글꼴 (Arial 10)과 공백 또는 탭 패드를 사용하여 특정 문자열의 픽셀 너비를 측정하는 방법이 필요합니다.

Graphics.MeaureString 메서드에 대해 알고 있지만 리치 텍스트 상자에 있기 때문에 초기화 된 PaintEventArgs 변수가 없기 때문에 하나의 문자열을 측정하기 위해 잔인한 것처럼 보일 것입니다. MSDN에서

:

Private Sub MeasureStringMin(ByVal e As PaintEventArgs) 

    ' Set up string. 
    Dim measureString As String = "Measure String" 
    Dim stringFont As New Font("Arial", 16) 

    ' Measure string. 
    Dim stringSize As New SizeF 
    stringSize = e.Graphics.MeasureString(measureString, stringFont) 

    ' Draw rectangle representing size of string. 
    e.Graphics.DrawRectangle(New Pen(Color.Red, 1), 0.0F, 0.0F, _ 
    stringSize.Width, stringSize.Height) 

    ' Draw string to screen. 
    e.Graphics.DrawString(measureString, stringFont, Brushes.Black, _ 
    New PointF(0, 0)) 
End Sub 

그래서 그냥 더미있는 PaintEventArgs 인스턴스를 만들 수있는 가장 좋은 방법입니까? 그렇다면, 나는 이것을 행하는 가장 좋은 방법은 무엇인가? (나는이 문자열 측정 방법을 수백 번 호출해야하기 때문에)?

또한 고정 폭 글꼴을 사용하고 싶지는 않습니다. 글꼴이 좋지는 않습니다.

답변

1

사용 내가 찾던 정확히이

Dim g as Graphics = richbox.CreateGraphics() 
Dim sz as SizeF = g.MeasureString(...) 
+0

- 정말 고마워. –

관련 문제