Отображение текста с фиксированной шириной в Winforms с использованием VB.NET - PullRequest
1 голос
/ 22 июня 2011

Мне нужно записать некоторый текст шрифта фиксированной ширины (например, Courier New или Consolas) в окно .net Winforms в событии Paint - без использования метки или любого другого элемента управления winforms - скорее, используя метод графического объекта для визуализациитекст в клиентскую область формы.

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

Например:

<br />
Heading 1          Heading 2<br />
Short              Other text
A bit longer       Still aligned?

Мне нужен отдельный вызов для отображения каждой ячейки текста в заголовке 2.Ради аргумента - скажем, элементы столбца 1 напечатаны черным, а столбец 2 - синим - мы не можем использовать один и тот же текстовый вызов для всей строки.

Ответы [ 2 ]

2 голосов
/ 22 июня 2011

Graphics.MeasureString может быть то, что вы ищете.

1 голос
/ 25 июня 2011

Хорошо, вот код, который работает так, как я хочу, используя MeasureString.Строка печатается дважды.Один раз с помощью одного вызова DrawString.Второй раз, символ за символом в цикле.Мне нужно было, чтобы две строки выглядели одинаково, но у меня были проблемы с получением правильного горизонтального положения каждого символа при рисовании второй строки.Вы можете вставить этот код в событие Paint формы, чтобы попробовать его (установите шрифт формы Consolas или другой шрифт фиксированной ширины):

Dim i As Single
Dim sf As StringFormat
Dim String1 As String = "Here is out test string"
Dim CharSizeF As SizeF

sf = StringFormat.GenericTypographic

CharSizeF = e.Graphics.MeasureString(String1, Me.Font, 10000, sf)
CharSizeF.Width /= String1.Length

e.Graphics.DrawString(String1, Me.Font, Brushes.Black, 0, 0, sf)

For Each c As Char In String1
    e.Graphics.DrawString(c.ToString, Me.Font, Brushes.Black, i * CharSizeF.Width, CharSizeF.Height, sf)
    i += 1
Next

enter image description here

Microsoftпомог:GenericTypographic.Также убедитесь, что TextRenderingHint для графики имеет значение AntiAlias.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...