Graphics.DrawString()与TextRenderer.DrawText() [英] Graphics.DrawString() vs TextRenderer.DrawText()

查看:251
本文介绍了Graphics.DrawString()与TextRenderer.DrawText()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对这两种方法感到困惑.

I am confused about these two methods.

我的理解是Graphics.DrawString()使用GDI +并且是基于图形的实现,而TextRenderer.DrawString()使用GDI并允许多种字体并支持unicode.

My understanding is that Graphics.DrawString() uses GDI+ and is a graphics-based implementation, while TextRenderer.DrawString() uses GDI and allows a large range of fonts and supports unicode.

我的问题是,当我尝试将基于十进制的数字作为百分比打印到打印机上时.我的研究使我相信TextRenderer是更好的选择.

My issue is when I attempt to print decimal-based numbers as percentages to a printer. My research leads me to believe that TextRenderer is a better way to go.

但是,MSDN建议不支持TextRenderer的DrawText方法进行打印.您应该始终使用Graphics类的DrawString方法."

我要使用Graphics.DrawString打印的代码是:

My code to print using Graphics.DrawString is:

if (value != 0)
    e.Graphics.DrawString(String.Format("{0:0.0%}", value), GetFont("Arial", 12, "Regular"), GetBrush("Black"), HorizontalOffset + X, VerticleOffset + Y);

这将为0到1之间的数字打印"100%",为零以下的数字打印"-100%".

This prints "100%" for number between 0 and 1 and "-100% for numbers below zero.

我放置时,

Console.WriteLine(String.Format("{0:0.0%}", value));

在我的打印方法中,该值以正确的格式打印(例如:75.0%),因此我可以确定问题出在Graphics.DrawString()之内.

inside my print method, the value prints in the correct format (eg: 75.0%), so I am pretty sure the problem lies within Graphics.DrawString().

推荐答案

这似乎与Graphics.DrawStringTextRenderer.DrawStringConsole.Writeline没有任何关系.

This does not appear to have anything to do with Graphics.DrawString or TextRenderer.DrawString or Console.Writeline.

您提供的格式说明符{0.0%}不会简单地附加一个百分号.根据MSDN文档此处%自定义说明符...

The format specifier you are providing, {0.0%}, does not simply append a percentage sign. As per the MSDN documentation here, the % custom specifier ...

导致数字在格式化之前要乘以100.

causes a number to be multiplied by 100 before it is formatted.

在我的测试中,Graphics.DrawStringConsole.WriteLine在传递相同的值和格式说明符时都表现出相同的行为.

In my tests, both Graphics.DrawString and Console.WriteLine exhibit the same behavior when passed the same value and format specifier.

Console.WriteLine测试:

class Program
{
    static void Main(string[] args)
    {
        double value = .5;
        var fv = string.Format("{0:0.0%}", value);
        Console.WriteLine(fv);
        Console.ReadLine();
    }
}

Graphics.DrawString测试:

public partial class Form1 : Form
{
    private PictureBox box = new PictureBox();

    public Form1()
    {
        InitializeComponent();
        this.Load += new EventHandler(Form1_Load);
    }

    public void Form1_Load(object sender, EventArgs e)
    {
        box.Dock = DockStyle.Fill;
        box.BackColor = Color.White;

        box.Paint += new PaintEventHandler(DrawTest);
        this.Controls.Add(box);
    }

    public void DrawTest(object sender, PaintEventArgs e)
    {
        Graphics g = e.Graphics;
        double value = .5;
        var fs = string.Format("{0:0.0%}", value);
        var font = new Font("Arial", 12);
        var brush = new SolidBrush(Color.Black);
        var point = new PointF(100.0F, 100.0F);

        g.DrawString(fs, font, brush, point);
    }
}

这篇关于Graphics.DrawString()与TextRenderer.DrawText()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆