c# - Graphics.DrawString 不绘制最后一个 SPACE 字符?

标签 c# drawstring

字符串是“Hello World”,最后有 10 个空格字符,但是 右对齐 中的 Graphics.DrawString 省略了所有空格字符,它只绘制了“Hello World”。

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);
    }

enter image description here

最佳答案

在使用 Gdi+ 绘制字符串时包含尾随空格 Graphics.DrawString方法,传递一个 StringFormat适当重载并添加或附加 (|=) StringFormatFlags.MeasureTrailingSpaces StringFormat.FormatFlags 的值属性(property)。

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);
}

关于c# - Graphics.DrawString 不绘制最后一个 SPACE 字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74653444/

相关文章:

c# - 在透明像素上使用 DrawString 呈现错误的文本

c# - 使用 watin 自动点击使用 Javascript 构建链接

c# - 确定文本字符串中的行数?

c# - asp.net 下拉列表和 View 状态

c# - 在 C# 中将字符串转换为 int

C# 单一字体字符大小?

c# - 在鼠标点击 PictureBox 时弹出一个 TextBox 以向图片添加自定义注释

java - 在 CardLayout 中重绘字符串

c# - 字符串中的 Unicode 字符

c# - 使用 Json.net 解析 JSON