2016-12-21 1 views
0

Я пытаюсь нарисовать разноцветную строку.Как правильно измерить символы в строке с помощью TextRenderer?

Как нет методов по умолчанию для этого, я пытаюсь нарисовать строковый символ с помощью char, используя TextRenderer.DrawText, однако он не сообщает правильную ширину первого символа, когда я пытаюсь измерить строку.

Чтобы нарисовать его char char, проведите по строке, измеряя ширину предыдущих символов, чтобы найти позицию следующего символа для рисования.

Чтобы получить ширину, я использую:

 TextRenderer.MeasureText(word.Substring(0, i), 
        drawFont, 
        new Size(int.MaxValue, int.MaxValue), 
        (TextFormatFlags.Left | TextFormatFlags.NoPadding)).Width 

Который работает нормально, но для первого символа, который формирует выходной сигнал, как:

 L OREMIPSUM 

В принципе, если есть только один персонаж - он измеряет он с отступом, несмотря на мои флаги.

можно использовать:

 TextRenderer.MeasureText(String.Concat("*", chr.ToString(), "*"), font).Width - TextRenderer.MeasureText("**", font).Width 

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

Я также могу использовать строку в методе выше, чтобы избежать использования TextRenderer.MeasureText и по-прежнему получать правильные результаты без первой проблемы с символом.

Что было бы правильным способом измерения символов в моем случае?

ответ

1

Из графического объекта вы должны использовать MeasureString. Также взгляните на TextRenderer.MeasureText and Graphics.MeasureString mismatch in size. Это объяснит разницу.

+0

Мне показалось, что я попытался дать ему графический экземпляр, но это не помогло, но я снова попытался, и это сработало. Я должен быть более осторожным, спасибо. – Murumuru

Смежные вопросы