繁体   English   中英

C#不必要的DrawString字母间距

[英]c# unwanted DrawString letter spacing

我从TextBox组件获得了一些文本,例如"aaaaaaaaaaaaaaaaaaaaa" 之后,我将隐藏此TextBox并在同一位置使用DrawString使用相同的OpenSans字体绘制文本。 但是我会得到这样的东西。 "aaaaaaaaaaaa aaaaaa" 空格较小,但仍然可见,字符串的第一部分很好。 我想隐藏文本框和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。

示例应用

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

正如您所看到的那样,即使许多标签看起来很丑陋,绘制也会变得非常复杂,并且需要一种严格的OO方法来编写无错误组件,例如Diagram Control,而不会引入一些难以修复的错误。 每种方法都是可行的,但是绘制肯定会更困难,并且可能需要更长的时间。 如果禁用的标签不干扰外观或使用,则将更易于管理。

隐藏TextBox ,可以显示Label

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM