字符串是"Hello“,最后有10个空格字符,但是Graphics.DrawString in Right 忽略了所有空格字符,它只绘制"Hello”。
protected override void OnPaint(PaintEventArgs e)
{
Rectangle rct = new Rectangle(20, 100, 200, 20);
e.Graphics.DrawRectangle(new Pen(Color.Lime), rct);
e.Graphics.DrawString("Hello World ", Font, new SolidBrush(SystemColors.ControlText), rct, new StringFormat() { Alignment = StringAlignment.Far});
base.OnPaint(e);
}
发布于 2022-12-02 14:33:48
若要在使用Gdi+ Graphics.DrawString
方法绘制字符串时包含尾随空格,请将StringFormat
传递到适当的重载,并向StringFormat.FormatFlags
属性添加或追加(|=
) StringFormatFlags.MeasureTrailingSpaces
值。
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Rectangle rct = new Rectangle(20, 100, 200, 20);
string s = "Hello World ";
using (var sf = new StringFormat(StringFormat.GenericTypographic))
{
sf.Alignment = StringAlignment.Far;
sf.LineAlignment = StringAlignment.Center;
sf.FormatFlags = StringFormatFlags.MeasureTrailingSpaces;
e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
e.Graphics.DrawString(s, Font, SystemBrushes.ControlText, rct, sf);
}
e.Graphics.DrawRectangle(Pens.Lime, rct);
}
考虑使用Gdi TextRenderer
类在控件上绘制字符串,除非遇到像drawing on transparent backgrounds这样的问题。
以前的代码可以编写如下:
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Rectangle rct = new Rectangle(20, 100, 200, 20);
string s = "Hello World ";
TextRenderer.DrawText(e.Graphics, s, Font, rct, SystemColors.ControlText,
TextFormatFlags.Right |
TextFormatFlags.VerticalCenter);
e.Graphics.DrawRectangle(Pens.Lime, rct);
}
https://stackoverflow.com/questions/74653444
复制相似问题