【问题标题】:Is it possible to calculate how many characters will fit in a fixed width label if font is provided in C#?如果在 C# 中提供字体,是否可以计算固定宽度标签中可以容纳多少个字符?
【发布时间】:2016-10-01 12:25:57
【问题描述】:

我在 C# 中有一个固定宽度(高度不是问题)标签组件。现在我想计算如果提供了字体大小和字体系列,大约有多少字符适合该宽度。我知道每个字符在渲染时都采用不同的像素,因此无法获得确切的字符数。但是,我认为如果我们采用不占用更多像素的字母并考虑该字母进行计算,我们将能够根据提供的字体获得适合固定宽度的近似字符数。因此,如果我们将字符“W”视为最宽的字符,那么我将如何计算适合特定宽度的“W”的数量。

我不能使用 GDI+ Graphics.MeasureString 方法,因为我需要在渲染角色之前使用它。

当我使用 GDI TextRenderer 类时

SizeF sizeOfW = TextRenderer.MeasureText("W", new Font("DejaVu Sans", 28.0F));

它返回{59.0, 44.0},我发现这是完全错误的,因为如果我将标签的宽度设为80 px,根据上面的计算它只会有一个'W',但实际上并非如此。

那么谁能告诉我哪里出错了?

【问题讨论】:

  • 该标签是否显示多个具有相同字体的“W”?
  • 它显示了 2 个 w,这不应该是这种情况,因为 59 + 59 = 118 并且它们在 80 和 118 之间有很大差异
  • 那么TextRenderer.MeasureText("WW", new Font("DejaVu Sans", 28.0F)) 会为您返回什么?
  • This question 和那里的答案(也是不被接受的答案)可以给出正确的方向

标签: c# .net winforms size pixels


【解决方案1】:

您可以使用以下内容:

var g=Graphics.FromHwnd(label1.Handle);
int charFitted, linesFitted;
g.MeasureString(mystring, label1.Font, label1.Size, null, 
                 out charFitted, out linesFitted);

执行后,charFitted 将拥有label1 可以显示的字符数量。

【讨论】:

  • Graphics.MeasureString 不是 TextRenderer.MeasureText 的替代品。
  • @HansPassant 我不认为 OP 要求替代 MeasureText,他也不想使用它。 OP 想要一个解决方案来计算给定字符串的多少个字符可以放入标签中,我认为这可能是一个解决方案。
猜你喜欢
  • 2019-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多