为什么我必须将 MeasureString()
结果宽度增加 21%
size.Width = size.Width * 1.21f;
在 DrawString()
中避免自动换行?
我需要一个解决方案来获得准确的结果。
两个函数中使用相同的字体、相同的字符串格式、相同的文本。
来自 OP 的回答:
SizeF size = graphics.MeasureString(element.Currency, Currencyfont, new PointF(0, 0), strFormatLeft);
size.Width = size.Width * 1.21f;
int freespace = rect.Width - (int)size.Width;
if (freespace < ImageSize) { if (freespace > 0) ImageSize = freespace; else ImageSize = 0; }
int FlagY = y + (CurrencySize - ImageSize) / 2;
int FlagX = (freespace - ImageSize) / 2;
graphics.DrawImage(GetResourseImage(@"Flags." + element.Flag.ToUpper() + ".png"),
new Rectangle(FlagX, FlagY, ImageSize, ImageSize));
graphics.DrawString(element.Currency, Currencyfont, Brushes.Black,
new Rectangle(FlagX + ImageSize, rect.Y, (int)(size.Width), CurrencySize), strFormatLeft);
我的代码。
最佳答案
MeasureString() 方法存在一些问题,尤其是在绘制非 ASCII 字符时。请改用 TextRenderer.MeasureText()。
关于c# - MeasureString 和 DrawString 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3811916/