2011-10-10 41 views
8

我需要建立一个类库,一个字符串并将此字符串特定字体的功能则得到字符串的宽度如何得到一个字符串宽度

所以,我怎么能得到串边界宽度?

+0

可以与此合并:http://stackoverflow.com/questions/5553965/programmatically-measure-string-in-asp-net – digEmAll

+0

测量网站的字符串的大小听起来有问题。无法确定浏览器将显示字体AFAIK的大小。 – davisoa

+0

一个特定的字体不足以知道这一点。您还需要知道哪个渲染器将显示文本。例如,Apple和MS渲染文本的方式非常不同,如果影响文本的图形宽度,我不会感到惊讶。如果你试图在服务器端获得html中显示的文本宽度(因为你的标签似乎暗示),这很可能是不可能的。 – CodesInChaos

回答

12

您可以得到一个Graphics对象(使用Control.CreateGraphics()在您想要的文本的容器上),并请拨打MeasureString()来执行此操作。这是一种相当常见的GDI + 技术。

从MSDN的更多信息:http://msdn.microsoft.com/en-us/library/6xe5hazb.aspx

+0

AFAIK GDI +文本测量有点问题。特别是当使用大小来居中文本不符合要求时。 – CodesInChaos

+0

我使用'MeasureString'方法,现在我得到了一个SizeF类型的返回值,然后将它赋值给PointF,我现在知道宽度但是在PointF中>>>我需要它的cm!我尝试转换它,因为我认为PointF就像Postscript点,但我认为我的转换公式不正确,所以如何在得到poinf的宽度后进行转换! – AshOoO

+1

'PointF'只是'Point'的一个'float'值(即非整数值)。从点转换为厘米应该是可行的(点 - >像素 - > dpi->英寸 - >厘米?),但为什么你需要厘米? –

14

另一种方式来做到这一点是具有TextRenderer,并调用MeasureString方法,并传递串和字体类型。

MSDN示例:

private void MeasureText1(PaintEventArgs e) 
{ 
    String text1 = "Measure this text"; 
    Font arialBold = new Font("Arial", 12.0F); 
    Size textSize = TextRenderer.MeasureText(text1, arialBold); 
    TextRenderer.DrawText(e.Graphics, text1, arialBold, 
     new Rectangle(new Point(10, 10), textSize), Color.Red); 
} 

注:这仅仅是一个替代的解决方案已经张贴由@Neil巴恩韦尔 的(同样有效)一个(如果您已经有到系统的参考.Windows.Forms在你的项目中,这可能会更方便)。

+0

我认为这只是在Windows应用程序不是类库项目! – AshOoO

+1

@AshOoO我同意,这就是我的答案结尾处的注释全是关于=) – jadarnel27

+1

这将测量当前表单上的文本大小。如果您需要在打印机输出上测量文本大小,则需要使用'e.Graphics.MeasureString(...)'方法。 – AaA