c#不需要的DrawString字母间距

时间:2015-11-22 21:07:39

标签: c# winforms

我从TextBox组件中获得了一些文本,例如"aaaaaaaaaaaaaaaaaaaaa"。之后,我隐藏了这个TextBox,并使用相同的OpenSans字体在同一个地方绘制带有DrawString的文本。但我会得到这样的东西。 "aaaaaaaaaaaa a a a a a a"。空间较小但仍然可见,字符串的第一部分是好的。我想隐藏textbox和DrawString之间的区别。问题出在哪儿?为什么会出现这些空格?

    PointF point = new PointF(
(this.shift.x + cx + rec.position.x + padding) / s, 
(this.shift.y + cy + rec.position.y + padding) / s
);

gfx.DrawString(rec.text, new Font(rec.font.FontFamily, rec.font.Size / s, rec.font.Style), new SolidBrush(rec.fontcolor), point);

示例应用程序。首先是文本框然后是标签,最后是DrawString。

example application

1 个答案:

答案 0 :(得分:2)

考虑使用Label控件而不是绘制文本。它为您处理绘图,并以更简单的方式提供更多控制。

即使很多标签看起来很难看,但正如您所见,绘图可能会变得非常复杂,并且需要一种高度自律的OO方法来编写无错误的组件,例如图表控件,而不会引入几个难以修复的错误。这两种方法都是可行的,但绘图肯定会更难,可能需要更长时间。如果禁用的标签不会干扰外观或使用,它们将更容易管理。

隐藏TextBox后,您可以显示Label

如果必须绘制字符串,请务必在绘制之前清除该区域。您看到的额外a可能是之前未被删除的抽奖的残余。 Graphics.Clear(color)是用于清除整个表单或控件的方法,如果只需要清除某个区域,则使用Graphics.FillRectangle(Brush,Color)。