在VB.net中获取字体宽度而不测量控件?

时间:2010-08-02 18:42:26

标签: vb.net fonts fixed-width

我需要在表单窗口中以富文本格式显示表格。它只是一个两列表,因此tabbing可以很好地排列所有内容(因为RichTextBox不支持RTF表)。但是,由于非固定宽度字体,有时标签停止不正确。

因此,我需要一种方法来测量特定字符串(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 个答案:

答案 0 :(得分:1)

使用此

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