Рисование текста в середине эллипса - PullRequest
0 голосов
/ 10 октября 2018

У меня есть приложение, которое в какой-то момент рисует много кругов на элементе управления Panel.Затем я хочу назвать каждый круг (просто буква и номер).И я хочу, чтобы текст был в центре, чтобы он выглядел красиво.На данный момент у меня есть что-то вроде этого:

enter image description here

Что я делаю, я беру центр этого круга и делаю следующее:

Graphics.DrawString($"s{i+1}", panel.Font, new SolidBrush(Color.White), pointOnCircle.X, pointOnCircle.Y);

(pointOnCircle.X and Y - это координаты центра).И, как вы можете видеть, это выглядит довольно плохо.

Мой вопрос здесь был бы: есть ли способ как-то вычислить, что X и Y для заданного размера шрифта и радиуса этих маленьких кругов, чтобы он выглядел по центру?

Результат использования принятого ответа или комментария @Johnny Mopp:

enter image description here

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Вам необходимо использовать перегрузку DrawString метода , который принимает аргумент StringFormat , а затем использовать StringFormat.Alignment и StringFormat.LineAlignment чтобы выровнять строку в центре и в середине круга:

using (StringFormat sf = new StringFormat())
{
    sf.Alignment = StringAlignment.Center;
    sf.LineAlignment = StringAlignment.Center;

    Graphics.DrawString($"s{i + 1}", panel.Font, new SolidBrush(Color.White),
                        pointOnCircle.X, pointOnCircle.Y, sf);
}
0 голосов
/ 10 октября 2018

Используйте Graphics.MeasureString, чтобы получить размер (X и Y) строки для указанного шрифта.Полученный размер можно использовать для центрирования текста.

...