我一直在處理自定義控件,並且遇到了令人驚訝的TextRenderer問題。在我的OnPaint事件我應用變換的圖形對象,以彌補這樣滾動條的位置:帶圖形變換的TextRenderer
e.Graphics.Transform = new System.Drawing.Drawing2D.Matrix(1, 0, 0, 1, this.AutoScrollPosition.X, this.AutoScrollPosition.Y);
然後我通過圖形對象來控制的所有子元素,讓他們自己畫上它。其中一個元素應該將文本字符串繪製到圖形表面上。這是我遇到問題的地方。這條線似乎滾動時正常工作:
e.Graphics.DrawString(this.Text, this.Font, brush, new PointF(this.Rectangle.X, this.Rectangle.Y));
但是,當我使用TextRenderer我得到一個完全不同的結果。下面是應該繪製文字的文本行:
TextRenderer.DrawText(e.Graphics, this.Text, this.Font, this.Rectangle, this.TextColor, TextFormatFlags.PreserveGraphicsClipping | TextFormatFlags.PreserveGraphicsTranslateTransform);
我認爲這兩行應該產生相同的結果。但由於某些原因,第二個應用圖形轉換的方式不同,因此,當我滾動控件時,所有文本行以不同於繪圖表面上其餘元素的速度移動。有人能解釋我爲什麼會發生這種情況嗎?
您是否嘗試過使用'e.Graphics.TranslateTransform(this.AutoScrollPosition.X,this.AutoScrollPosition.Y)'而不是2d矩陣?它不應該真的有什麼區別,但是接下來,'TextRenderer'也應該可以正常工作... – takrl 2011-05-24 08:07:16
@takrl沒有幫助:(對我來說仍然有不同的變化 – 2011-05-24 08:11:22