Нарисуйте текст в центре - PullRequest
11 голосов
/ 09 июня 2009

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

Ответы [ 6 ]

16 голосов
/ 09 июня 2009

Этот код центрирует текст по горизонтали и вертикали:

stringFormat sf;
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;
grp.DrawString(text, font, Brushes.Black, rectf, sf);
11 голосов
/ 09 июня 2009

Я немного поиграл с этим и нашел это решение (предполагая, что RectangleF rect и string text уже определены):

StringFormat stringFormat = new StringFormat()
{
    Alignment = StringAlignment.Center,
    LineAlignment = StringAlignment.Center
};

using (Graphics g = this.CreateGraphics())
{
    SizeF s = g.MeasureString(text, this.Font);
    float fontScale = Math.Max(s.Width / rect.Width, s.Height / rect.Height);
    using (Font font = new Font(this.Font.FontFamily, this.Font.SizeInPoints / fontScale, GraphicsUnit.Point))
    {
        g.DrawString(text, font, Brushes.Black, rect, stringFormat);
    }
}
4 голосов
/ 09 июня 2009

Это работает для меня, знаю. Это то, что я сделал

Size textSize = TextRenderer.MeasureText(Text, Font);
float presentFontSize = Font.Size;
Font newFont = new Font(Font.FontFamily, presentFontSize, Font.Style);
while ((textSize.Width>textBoundary.Width || textSize.Height > textBoundary.Height) && presentFontSize-0.2F>0)
{
   presentFontSize -= 0.2F;
   newFont = new Font(Font.FontFamily,presentFontSize,Font.Style);
   textSize = TextRenderer.MeasureText(ButtonText, newFont);
}
stringFormat sf;
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;
e.Graphics.DrawString(Text,newFont,Brushes.Black,textBoundary, sf);   
0 голосов
/ 20 декабря 2015

Простота в использовании:)

    public static void DrawStringCenter(Image image, string s, Font font, Color color, RectangleF layoutRectangle)
    {
        var graphics = Graphics.FromImage(image);

        var brush = new SolidBrush(color);

        var format = new StringFormat
        {
            Alignment = StringAlignment.Center,
            LineAlignment = StringAlignment.Center
        };

        graphics.DrawString(s, font, brush, layoutRectangle, format);
    }
0 голосов
/ 09 июня 2009

Получите ширину / 2 и высоту / 2 прямоугольника, затем с помощью System.Graphics.MeasureString получите размеры вашей строки, снова наполовину их и вычтите из ваших предыдущих значений ширины / высоты, и вы получите X, Координата Y для рисования вашей строки, чтобы она была в центре.

0 голосов
/ 09 июня 2009

Определите размер текста, который нужно нарисовать, а затем определите смещение начала строки от центра rectangleF и нарисуйте его.

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