我正在尝试根据其内容宽度设置标签的宽度(“ label1”)。但是,每次使用String.Length-Method获得字符串的长度时,宽度似乎都太小,并且字符串不适合标签。

  string anystring = "ThisIsMyString";
  int i = anystring.Length;
  label1.Text = anystring;
  label1.Width = i + 10; //I add +10 to have some buffer


问题String.Length和Label.Width具有不同的度量单位吗?还有其他方法可以解决吗?
(我知道我可以简单地将零件留在设置标签宽度的位置,但是我想知道如何出于好奇而这样做)

最佳答案

使用Windows在屏幕上显示时,确定文本宽度或大小的正确方法是使用Graphics.MeasureString


  使用指定的字体绘制时测量指定的字符串。


原因是以下几件事会影响您返回的确切尺寸:


显然是文字
使用的字体系列/类型
使用的字体大小
字体样式(粗体,斜体等)


这是一个非常简短的示例:

using (var f = new Font("Arial", 8.25f))
using (var g = Graphics.FromHwnd(IntPtr.Zero)) // Desktop
{
    SizeF size = g.MeasureString("Test", f);
}


显然,应该使用从控件获取的Graphics对象以及标签的字体(如果要将其用于标签),以避免构造和使用上面的对象。

09-10 02:10
查看更多