我一直在处理自定义控件,并且遇到了令人惊讶的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