首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Graphics.DrawString不画最后一个空格图吗?

Graphics.DrawString不画最后一个空格图吗?
EN

Stack Overflow用户
提问于 2022-12-02 09:24:56
回答 1查看 47关注 0票数 3

字符串是"Hello“,最后有10个空格字符,但是Graphics.DrawString in Right 忽略了所有空格字符,它只绘制"Hello”。

代码语言:javascript
运行
复制
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);
    }

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-12-02 14:33:48

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

代码语言:javascript
运行
复制
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这样的问题。

以前的代码可以编写如下:

代码语言:javascript
运行
复制
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);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74653444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档