コントロールから単純に継承し、textrenderinghint を取得/設定するプロパティを提供するコントロールの OnPaint メソッドを次に示します。
Private _mode as TextRenderingHint = SystemDefault.
Public Property Mode as TextRenderingHint
Get & Set _mode
...
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
Dim g = e.Graphics
Dim savMode = g.Save
g.TextRenderingHint = Me._mode
g.DrawString(Me.Text, Me.Font, Brushes.Black, 0, 0)
g.Restore(savMode)
MyBase.OnPaint(e)
End Sub
これらのうちの 2 つをフォームに配置し、最初のラベルをデフォルトのままにして、2 番目のラベルを AntiAlias に変更すると、デザイン時には問題なく見えますが、アプリを実行すると、最初のラベルのレンダリング モードが変更されます。DrawString メソッドがシステムのデフォルトを変更したかのようです。
ここにいくつかの観察があります:
(1) 最初のコントロールのモードを私の場合のデフォルトと同じ ClearTypeGridFit に明示的に設定すると、問題が修正されます。
(2) フォームに 3 番目のコントロールを配置し、デフォルト モードのままにすると、問題が修正されます。
(3) TextRenderer.DrawText は問題を再現しません。
(4) ラベル コントロールを継承し、onpaint メソッドをオーバーライドしてレンダリング モードを設定すると、UseCompatibleTextRendering を設定しても問題は再現されません。これにより、ラベルは DrawText ではなく DrawString でレンダリングされます。
私は XP で cleartype を有効にし、Visual Studio 2008 Express Edition を使用しています。
ETA: C# で試してみましたが、同じことが起こります