我正在尝试根据其内容宽度设置标签的宽度(“ 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
对象以及标签的字体(如果要将其用于标签),以避免构造和使用上面的对象。