如何获得字符串的大小?在Windows Forms中,它很简单,我只使用图形对象然后使用MeasureString函数。在ASP.NET中我不知道该怎么做。
答案 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)
返回字符串的长度(字符数)。
<强> 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
我不确定为什么这么多人 显然已经决定提出这个服务器方面“完全不可能”的想法,事实并非如此。你只需要有点创意,并愿意做很多测试。
我不知道测量字符串像素尺寸的原生函数。您可以通过以下方式实现它。请注意,您需要知道:
<强> 1。将其渲染为图像并测量图像尺寸
将文本绘制到位图,然后进行测量。这应该是相当准确的。
<强> 2。使用固定宽度字体
如果您使用固定宽度字体并且文本没有换行,则可以简单地将其宽度乘以字符数。
第3。粗略估计
通过选择一些任意字符宽度数并将其乘以总字符数,您可以对非固定宽度字体进行合理粗略的估算。取决于你想要的准确程度。
答案 2 :(得分:3)
答案 3 :(得分:0)
您可以在字符串上使用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;
}
}