哪个是在rectangleF的中心drawString的最佳方法?可以减小文本字体大小以适应它。在大多数情况下,Text太大而不适合给定的字体,因此必须减少字体。
答案 0 :(得分:16)
此代码水平和垂直居中文本:
stringFormat sf;
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;
grp.DrawString(text, font, Brushes.Black, rectf, sf);
答案 1 :(得分:11)
我玩了一下并发现了这个解决方案(假设已经定义了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);
}
}
答案 2 :(得分:4)
这对我有用。这就是我所做的
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);
答案 3 :(得分:0)
确定要绘制的文本的大小,然后从rectangleF的中心确定字符串开头的偏移量并绘制它。
答案 4 :(得分:0)
获取矩形的宽度/ 2和高度/ 2,然后使用System.Graphics.MeasureString获取字符串的尺寸,再次将它们减半,并从之前的宽度/高度值中减去,最后得到X, Y坐标用于绘制字符串,以使其居中。
答案 5 :(得分:0)
易于使用:)
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);
}