2010-08-02 83 views
2

我需要在表单窗口中以丰富文本显示表格。它只是一个两列表,因此TabBbing可以正常工作,因为RichTextBox不支持RTF表格。但是,由于非固定宽度的字体,有时制表位不正确。获取VB.net中的字体宽度而不测量控件?

所以,我需要一种方法来测量特定字符串的像素宽度(Arial 10)和空格或制表符,以确保所有内容都一致。

我知道Graphics.MeaureString方法,但由于这是在一个丰富的文本框中,我没有初始化PaintEventArgs变量,而且看起来像矫枉过正以创建JUST来测量一个字符串。

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

正是我一直在寻找的 - 非常感谢。 – 2010-08-02 19:08:48