了解OnPaint方法

时间:2014-10-17 12:20:13

标签: c# winforms labels smooth

我正在做一些有很多标签的项目。我有一项任务是让标签更平滑,因为它看起来很难看。我编写了自定义LabelEx类,扩展了Label类。然后我覆盖了这样的OnPaint()方法:

protected override void OnPaint(PaintEventArgs e)
{
   base.OnPaint(e);
   e.Graphics.TextRenderingHint = TextRenderingHint.AntiAlias;
}

但它不起作用。我还有旧的丑陋标签。

帮助我理解OnPaint方法的含义。它是如何工作的?我希望我的标签具有我在myClass.cs[Design](位置,大小,TextAlign,字体)中设置的属性。我只需要让它们更顺畅。

This is what I call "ugly"

1 个答案:

答案 0 :(得分:2)

默认情况下,Label OnPaint使用GDI(System.Windows.Forms.TextRenderer),而不使用GDI +(System.Drawing.Graphics)来使用GDI +,您需要设置UseCompatibleTextRendering True并在调用base.OnPaint之前更改您的GDI +选项( E); 这是一个例子:

public class LabelEx : System.Windows.Forms.Label
{
    public LabelEx()
    {
        UseCompatibleTextRendering = true;
    }
    protected override void OnPaint(PaintEventArgs e)
    {
        e.Graphics.TextRenderingHint = TextRenderingHint.AntiAlias;
        // You can try this two options too.
        //e.Graphics.CompositingQuality = CompositingQuality.HighQuality;
        //e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
        base.OnPaint(e);
    }
}