这是一个控件的OnPaint方法,它继承自控件,并提供了一个属性来获取/设置文本呈现提示:
现在,如果你在一个表单上放置两个标签控件,第一个保持默认设置,而将第二个设置为AntiAlias,则在设计时看起来很好,但是当你运行应用程序时,第一个标签的呈现模式已经发生了变化。就好像DrawString方法更改了系统默认值。
以下是一些观察结果:
(1) 如果明确设置第一个控件的模式为ClearTypeGridFit(在我的情况下与默认值相同),则可以解决问题。
(2) 如果在表单上放置第三个控件并保持默认模式,则可以解决问题。
(3) TextRenderer.DrawText不会复制这个问题。
(4) 如果继承标签控件并覆盖onpaint方法设置呈现模式,则不会复制该问题,即使我设置了UseCompatibleTextRendering - 这会强制标签使用DrawString而不是DrawText进行呈现。
我正在使用启用了ClearType的XP和Visual Studio 2008 Express版。
预计完成时间:我已经在C#中尝试过了,结果是相同的。
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
现在,如果你在一个表单上放置两个标签控件,第一个保持默认设置,而将第二个设置为AntiAlias,则在设计时看起来很好,但是当你运行应用程序时,第一个标签的呈现模式已经发生了变化。就好像DrawString方法更改了系统默认值。
以下是一些观察结果:
(1) 如果明确设置第一个控件的模式为ClearTypeGridFit(在我的情况下与默认值相同),则可以解决问题。
(2) 如果在表单上放置第三个控件并保持默认模式,则可以解决问题。
(3) TextRenderer.DrawText不会复制这个问题。
(4) 如果继承标签控件并覆盖onpaint方法设置呈现模式,则不会复制该问题,即使我设置了UseCompatibleTextRendering - 这会强制标签使用DrawString而不是DrawText进行呈现。
我正在使用启用了ClearType的XP和Visual Studio 2008 Express版。
预计完成时间:我已经在C#中尝试过了,结果是相同的。