【问题标题】:c# unwanted DrawString letter spacingc#不需要的DrawString字母间距
【发布时间】:2015-11-23 05:57:58
【问题描述】:

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

【问题讨论】:

  • 请显示您用于DrawString的代码,即您正在使用的参数值
  • 这是网络吗?窗体? WPF?
  • new Font(...)new SolidBrush(...) 是一次性的,不应该像那样匿名创建。更好:using (var f = new Font(...)) using (var b = new SolidBrush(...)) { ... }
  • 我们需要更多的代码,尤其是。代码是怎么调用的!

标签: c# winforms


【解决方案1】:

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

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

隐藏TextBox时,可以显示Label

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

【讨论】:

  • 这个拉绳是图表程序的一部分。它可以在一种形式中有很多字符串。
  • 嗯,你可以画弦,只是更具挑战性。先清除背景解决了吗?
猜你喜欢
  • 2015-02-09
  • 1970-01-01
  • 1970-01-01
  • 2015-09-30
  • 2020-09-11
  • 1970-01-01
  • 1970-01-01
  • 2014-07-02
  • 2012-10-25
相关资源
最近更新 更多