2014-10-17 95 views
1

我正在做一些項目巫婆有很多標籤。我有一項任務是讓標籤更平滑,因爲它看起來很醜。我寫了我的自定義LabelEx類,它擴展了Label類。然後我重寫了OnPaint()這樣的方法:瞭解OnPaint方法

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

但它不起作用。我仍然有我的老醜標籤。

幫我理解OnPaint方法的含義。它是如何工作的?我希望我的標籤具有我在myClass.cs[Design](位置,大小,文字對齊,字體)中爲他們設置的屬性。我只需要讓它們更平滑。

This is what I call "ugly"

+0

這將有助於能夠看到「醜陋」對你意味着什麼。截圖? – DonBoitnott 2014-10-17 12:24:38

+0

已更新。我需要這些字母更加平滑。 – GugaMelkadze 2014-10-17 12:30:49

+0

[SmoothingMode](http://msdn.microsoft.com/en-us/library/system.drawing.graphics.smoothingmode(v = vs.110).aspx)? – Reniuz 2014-10-17 12:33:54

回答

2

默認標籤的OnPaint使用GDI(System.Windows.Forms.TextRenderer),而不是GDI +(System.Drawing.Graphics),使用GDI +你需要設置UseCompatibleTextRendering真正改變你的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); 
    } 
} 
+0

謝謝,我會在測試此消息時通知您。 – GugaMelkadze 2014-10-17 12:40:55

+0

不客氣。如果你需要更多的定製讓我知道,我可以告訴你如何取代base.OnPaint – 2014-10-17 13:04:25

+0

它與TextRenderingHint.AntiAlias合作。我只需要在Antialias上面寫base.OnPaint(e)並設置UseCompatibleTextRendering = true;非常感謝你。 – GugaMelkadze 2014-10-17 14:02:22