gpt4 book ai didi

c# - Graphics.DrawString() 与 TextRenderer.DrawText()

转载 作者:太空狗 更新时间:2023-10-29 20:37:42 28 4
gpt4 key购买 nike

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

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

我的问题是当我尝试将基于十进制的数字作为百分比打印到打印机时。我的研究使我相信 TextRenderer 是一种更好的方法。

但是,MSDN 建议,“不支持打印 TextRenderer 的 DrawText 方法。您应该始终使用 Graphics 类的 DrawString 方法。”

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

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%”。

当我放置时,

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

在我的打印方法中,值以正确的格式打印(例如:75.0%),所以我很确定问题出在 Graphics.DrawString() 中。

最佳答案

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

您提供的格式说明符 {0.0%} 不只是附加百分号。根据 MSDN 文档 here , % 自定义说明符 ...

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

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

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

关于c# - Graphics.DrawString() 与 TextRenderer.DrawText(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5799646/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com