Вот метод OnPaint элемента управления, который просто наследует от управления и обеспечивает свойство, чтобы получить/установить textrenderinghint:Возможная ошибка с Graphics.DrawString и TextRenderingHint в .NET WinForms
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 изменил systemdefault.
Вот некоторые наблюдения:
(1) Если я в явной форме установить режим первого элемента управления к ClearTypeGridFit, который так же, как по умолчанию в моем случае, это устраняет проблему.
(2) Если вы поместите третий элемент управления в форму и оставьте его в режиме по умолчанию, он устраняет проблему.
(3) TextRenderer.DrawText не реплицирует проблему.
(4) Если я наследую управление меткой и переопределяю метод onpaint для установки режима рендеринга, проблема не реплицируется, даже если я устанавливаю UseCompatibleTextRendering, что заставляет метку визуализировать с помощью DrawString вместо DrawText.
Я нахожусь на XP с включенным разрешением cleartype и с использованием экспресс-редакции visual studio 2008.
ETA: Я попробовал это в C# и то же самое происходит
К сожалению, звонка нет. Я был бы удивлен, если бы это решило проблему, хотя, потому что я сам рисую текст и явно использую метод gdi + drawstring. Кроме того, с моим замечанием 2 выше, это, по-видимому, более глубокая проблема. – Jules
Хорошо. Возможно, стоит сделать снимок, добавьте этот призыв к запуску вашего приложения. Попробуйте установить как SetCompatibleTextRenderingDefault (true), так и SetCompatibleTextRenderingDefault (false) и посмотреть, какое влияние он оказывает на ваше приложение. Прошло некоторое время, давно переключившись на WPF, но, похоже, это напоминает об эффекте даже в материалах DrawString. –