Ich habe ein Steuerelement in C# WinForms subclassed, und bin benutzerdefinierte Zeichnung Text in meinem OnPaint()
Handler. Die Schriftart Courier New mit dem folgenden Code in meiner Form festgelegt ist:Warum zeigt DrawString unerwartetes Verhalten in C# Winforms?
FontFamily family = new FontFamily("Courier New");
this.myControl.Font = new Font(family, 10);
Bei der Steuerung selbst wird die Zeichenfolge in realText
gespeichert, und ich verwende den folgenden Code, um es auf den Bildschirm zu zeichnen:
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.DrawString(realText, Font, new SolidBrush(ForeColor), ClientRectangle);
}
das Ergebnis für einige zufällige Beispiel Text sieht wie folgt aus: http://img219.imageshack.us/img219/1778/courier.png
Wenn Sie die Ansicht vergrößern, können Sie beispielsweise sehen können, dass der Raum zwischen dem ersten ‚als‘ anders ist, als t er Abstand zwischen dem zweiten 'as' (1 Pixel gegenüber 2 Pixel). Hat jemand eine Idee, was das verursachen könnte oder wie ich es verhindern kann? Es gibt viel mehr Ähnlichkeiten in der Beabstandung, da ich mit verschiedenen Schriftarten zeichne, aber ich nehme an, dass es sich um Ergebnisse desselben Problems handelt.
Vielen Dank im Voraus für Ihre Ideen.
Wunderbar, das hat es getan, ohne auf win32 Code zurückgreifen zu müssen. Danke – Ko9
Wird das GDI-Objekt freigegeben, wenn der Garbage Collector ausgeführt wird? –
Nein. Pinsel- und Stiftobjekte in .NET sind nur verwaltete Wrapper um nicht verwaltete Ressourcen (GDI-Pinsel oder -Stift). Wenn der Garbage Collector ausgeführt wird, wird der .NET-Wrapper, nicht jedoch das zugrunde liegende GDI-Objekt entfernt. Die allgemeine Faustregel für GDI-Objekte besteht darin, sie entweder in einen using-Block zu packen oder sie explizit in Ihrem Finalizer zu entfernen. Sie sollten dies überprüfen können, indem Sie den Task-Manager verwenden (aktivieren Sie die Spalte GDI-Objekte) und beobachten, wie sich die Anzahl erhöht, wenn Sie die Ressourcen verlieren. Die Anzahl wird nicht sinken, selbst wenn Sie den GC in Aktion treten. –