如何以编程方式测量ASP.NET中的字符串像素宽度?

时间:2011-04-05 14:58:49

标签: asp.net string code-behind

如何获得字符串的大小?在Windows Forms中,它很简单,我只使用图形对象然后使用MeasureString函数。在ASP.NET中我不知道该怎么做。

7 个答案:

答案 0 :(得分:14)

像汤姆古伦说的那样。你可以创建一个位图并弄乱字符串。我用这个代码来查找像素的宽度/长度。只需更改字体和大小。

// Bitmap class namespace:
using System.Drawing;

...

private float GetWidthOfString(string str)
{
    Bitmap objBitmap = default(Bitmap);
    Graphics objGraphics = default(Graphics);

    objBitmap = new Bitmap(500, 200);
    objGraphics = Graphics.FromImage(objBitmap);

    SizeF stringSize = objGraphics.MeasureString(str, new Font("Arial", 12));

    objBitmap.Dispose();
    objGraphics.Dispose();
    return stringSize.Width;
}

只想展示一个例子。

答案 1 :(得分:3)

string.length减

返回字符串的长度(字符数)。

<强> C#

string MyString = "Stack Overflow String";
Response.Write(MyString.Length);

<强> VB.net

Dim MyString As String = "Stack Overflow String"
Response.Write(MyString.Length);

MSDN参考

http://msdn.microsoft.com/en-us/library/system.string.length.aspx

物理字符串大小Serverside

  

我不确定为什么这么多人   显然已经决定提出这个服务器方面“完全不可能”的想法,事实并非如此。你只需要有点创意,并愿意做很多测试。

我不知道测量字符串像素尺寸的原生函数。您可以通过以下方式实现它。请注意,您需要知道:

  • 字体系列
  • 字体大小
  • 容器尺寸(用于文本换行时)
  • 任何其他CSS规则(如字间距)都会使计算更准确,更复杂。如果准确性很重要,请尽量避免使用它。

<强> 1。将其渲染为图像并测量图像尺寸

将文本绘制到位图,然后进行测量。这应该是相当准确的。

<强> 2。使用固定宽度字体

如果您使用固定宽度字体并且文本没有换行,则可以简单地将其宽度乘以字符数。

第3。粗略估计

通过选择一些任意字符宽度数并将其乘以总字符数,您可以对非固定宽度字体进行合理粗略的估算。取决于你想要的准确程度。

答案 2 :(得分:3)

如果您使用的是JQuery,请参阅此答案

Determine Pixel Length of String in Javascript/jQuery?

我确定你能不能做类似的工作。

答案 3 :(得分:0)

您可以在字符串上使用Length属性,如下所示:

http://www.dotnetperls.com/string-length

答案 4 :(得分:0)

在服务器端做这是完全不可能的事情(假设“ASP.NET”,你指的是使用ASP.NET创建的网页“)。 ASP.NET输出 HTML ,这是一种由客户端上的浏览器解释和呈现的标记语言。相同的HTML代码可以在各种设备上,在各种浏览器中,使用各种安装的字体等显示,导致显示不同。

在服务器上运行代码的ASP.NET站点不知道客户端使用的字体,分辨率等。唯一可以做到的理论方式是运行客户端代码(例如JavaScript,Silverlight,Flash,...)来向服务器报告。但是,这将非常困难。

通常,您不需要这样做,您不想这样做。

答案 5 :(得分:0)

@Tom Gullen,@ asawyer

这是我的临时解决方案,现在似乎正在运作。 fyi,我的项目碰巧是一个asp.net应用程序,其中包含许多动态接口(这是另一个故事)。无论如何,我的短期解决方案发布在下面。当用户单击文本框(自定义组合框)时,我会动态地使用modalpopupextender(带有列表框)。 ajax组合框不能很好地工作,特别是当它们有很多并且你无法在下拉列表中设置下拉宽度时。

Friend Function ResizePopup(ByVal sender As Object, ByVal standardwidth As Integer) As Integer
    Dim lst As ListBox = CType(sender, ListBox)
    Dim itemlength As Single = 0

    'get longest string length
    For Each item As ListItem In lst.Items
        If item.Text.Length > itemlength Then
            itemlength = item.Text.Length
        End If
    Next

    'set a general multiplier
    Dim newWidth As Integer = itemlength * 7

    'compare to width of control, if larger, then use value else return control width
    If newWidth > standardwidth Then
        Return newWidth
    Else
        Return standardwidth
    End If

End Function

答案 6 :(得分:0)

@Eystein Bye的解决方案,使用时略显清晰:

using (Bitmap objBitmap = new Bitmap(5000, 200))
{
     using (Graphics objGraphics = Graphics.FromImage(objBitmap))
     {
          SizeF stringSize = objGraphics.MeasureString(txt, new Font("Arial", 12));
          return stringSize.Width;
     }
}