Получить ширину шрифта в VB.net без измерения элемента управления? - PullRequest
2 голосов
/ 02 августа 2010

Мне нужно отобразить таблицу в расширенном тексте в окне формы.Это таблица только из двух столбцов, поэтому табуляция прекрасно работает для выравнивания всего (так как 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 Ответ

1 голос
/ 02 августа 2010

Используйте это

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