Получить ширину шрифта в VB.net без измерения элемента управления?

Мне нужно отобразить таблицу в форматированном тексте в окне формы. Это всего лишь таблица из двух столбцов, поэтому табуляция отлично работает, чтобы выровнять все (поскольку RichTextBox не поддерживает RTF-таблицы). Однако иногда позиции табуляции неверны из-за шрифтов с нефиксированной шириной.

Итак, мне нужен способ измерить ширину в пикселях конкретной строки с определенным шрифтом (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? Если да, то как лучше всего это сделать (поскольку мне придется вызывать этот метод измерения строк несколько сотен раз)?

Кроме того, я действительно не хочу использовать шрифт с фиксированной шириной — они просто выглядят не так хорошо.


person Andrew J. Freyer    schedule 02.08.2010    source источник


Ответы (1)


Использовать этот

Dim g as Graphics = richbox.CreateGraphics()
Dim sz as SizeF = g.MeasureString(...)
person John Alexiou    schedule 02.08.2010