Каков наилучший способ drawString в центре прямоугольника F? Размер шрифта может быть уменьшен до размера шрифта. В большинстве случаев текст слишком велик, чтобы соответствовать данному шрифту, поэтому нужно уменьшить шрифт.
Нарисуйте текст в центре
Ответ 1
Он работает для меня. Это то, что я сделал
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);
Ответ 2
Этот код центрирует текст по горизонтали и по вертикали:
stringFormat sf;
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;
grp.DrawString(text, font, Brushes.Black, rectf, sf);
Ответ 3
Я немного поиграл с ним и нашел это решение (предполагая, что 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
Определите размер текста для рисования, а затем определите смещение для начала строки из центра прямоугольника F и нарисуйте его.
Ответ 5
Получите ширину /2 и высоту /2 прямоугольника, затем с помощью System.Graphics.MeasureString, чтобы получить размеры вашей строки, повторите половину их и вычтите из ваших ранних значений ширины/высоты, и вы получите X, Y, чтобы нарисовать вашу строку, чтобы она была центрирована.
Ответ 6
Прост в использовании:)
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);
}