Как программно измерить ширину пикселя строки в ASP.NET?
Как вы получаете размер строки? В Windows Forms это просто, я просто использую графический объект, а затем функцию MeasureString. В ASP.NET я не знаю, как это сделать.
8 ответов
Как говорит Том Галлен. Вы можете просто создать растровое изображение и messure строку. У меня есть этот код, который я использую, чтобы найти ширину/длину в пикселе. Просто измените шрифт и размер.
// 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;
}
просто хотел показать пример.
Если вы используете JQuery, см. Этот ответ
определить длину пикселя строки в Javascript / jQuery?
Я уверен, что если нет, вы можете работать что-то подобное.
строку.Длина
возвращает длину строки (количество символов).
C#
string MyString = "Stack Overflow String";
Response.Write(MyString.Length);
VB.net
Dim MyString As String = "Stack Overflow String"
Response.Write(MyString.Length);
MSDN Reference
http://msdn.microsoft.com/en-us/library/system.string.length.aspx
Размер Физической Строки Serverside
Я не уверен, почему так много людей по-видимому, решил выдвинуть идея о том, что это "невозможно" сделать на этой стороне сервера, это не так. Вам просто нужно быть немного творческим и быть готовым сделать много тестов.
Я не знаю собственной функции для измерения размеров пикселей строки. Вы можете достичь этого следующими способами. Примечание Вы должны знать:
- шрифт
- размер шрифта
- размеры контейнера (для обертывания текста линии)
- любые другие правила CSS, такие как интервал между словами, сделают расчет намного менее точным и более сложным. Старайтесь избегать его, если важна точность.
1. Визуализируйте его в изображение и измерьте размер изображения
нарисуйте текст в растровое изображение, а затем измерьте его. Это должно быть достаточно точно.
2. Используйте шрифт фиксированной ширины
если вы используете моноширинный шрифт и текст не оборачиваю, вы можете просто умножить его ширину на количество символов.
3. Грубая оценка
вы можете получить достаточно грубую оценку не фиксированных шрифтов ширины, выбрав некоторое произвольное число ширины символа и умножив его на общие символы. Зависит от того, насколько точно вы хотите быть.
Это совершенно невозможно сделать на стороне сервера (предполагая, что "ASP.NET", вы имеете в виду веб-страницы, созданные с помощью ASP.NET"). ASP.NET выходы HTML-код, который является языком разметки интерпретируется и оказанные браузером на клиенте. Тот же HTML-код может быть отображен на различных устройствах, в различных браузерах, используя различные шрифты и т. д., в результате чего сильно отличается дисплей.
ваш ASP.NET сайт, выполняющий код на сервере, не знаете, какой шрифт, какое разрешение и т. д. ваш клиент использует. Единственное теоретической способ, которым это можно было бы сделать,-это запустить клиентский код (например, JavaScript, Silverlight, Flash,...) для отчета на сервер. Однако это будет довольно трудно.
Как правило, вам не нужно это делать, вы не хотите этого делать.
@Tom Gullen, @asawyer
Это мое временное решение, и это, кажется, работает сейчас. к вашему сведению, мой проект оказался asp.net приложение с множеством динамических интерфейсов, участвующих в нем (это другая история). На anyrate мой краткосрочного решения опубликован ниже. Im acually с помощью modalpopupextender (с listbox) на лету, когда пользователь нажимает текстовое поле (пользовательский combobox). Ajax combobox работает не очень хорошо, особенно когда их много, и вы не можете установить ширину выпадающего на dropdownlist для.
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
следующий метод предоставит размер строки, отображаемой в данном шрифте:
private RectangleF sizeOfString(string text, Font font)
{
GraphicsPath path = new GraphicsPath();
path.AddString(text, font.FontFamily, (int)font.Style, font.Size, new Point(0, 0), new StringFormat());
return path.GetBounds();
}
вы можете использовать это, чтобы получить ширину следующим образом
float width = sizeOfString("Hello World", someFont).Width;
решение@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;
}
}