我有一个WinForms表单,并希望使所有文本(例如标签,按钮)都消除锯齿。这让我抓狂,因为我在google上找不到任何东西,这或者意味着它是如此明显,或者我离开了基地。
我最好的想法是在我的主窗体中覆盖OnPaint,但这似乎没有改变任何东西。
protected override void OnPaint(PaintEventArgs e) {
e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
base.OnPaint(e);
}
帮助!
答案 0 :(得分:2)
听起来你不希望抗锯齿像ClearType使用的子像素渲染那么多。更具体地说,您可能想要查看TextRenderingHint Enumeration成员ClearTypeGridFit。
答案 1 :(得分:1)
这是因为您所做的只会影响直接在表单上绘制的文本。我想你必须在用户控件中重写OnPaint子类标签,按钮等
答案 2 :(得分:0)
如果我没记错的话,在您按照答案中的描述设置抗锯齿模式后,在DrawString
对象上调用Graphics
时,抗锯齿功能才有效。
标准WinForms控件不使用此方法,因此简单的覆盖将不起作用。
答案 3 :(得分:0)
我知道这是一个非常老的问题,但是由于有些人仍在使用WinForms(包括我自己),但是我想在这里添加一些有用的信息。
除了将TextRenderingHint设置为AntiAlias之外,还将Graphics.CompositingQuality设置为HighQuality对WinForms中的抗锯齿文本的质量也有重大影响。我至少已使用此技巧来生成自定义的高质量Label和其他表单控件。我发现,没有它,WinForms产生的质量对于现代UI来说并没有真正达到极限,因此结果的质量明显比我在Photoshot / Designer中的模型差。使用此设置后,文本显得更加平滑和清晰。
如何在Label上实现此示例:
public class AntiAliasingLabel : Label
{
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;
e.Graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
e.Graphics.DrawString(Text, Font, new SolidBrush(ForeColor), 0, 0);
}
}