Как программно измерить ширину строки в ASP.NET? - PullRequest
9 голосов
/ 05 апреля 2011

Как вы получаете размер строки?В Windows Forms это просто, я просто использую графический объект, а затем функцию MeasureString.В ASP.NET я не уверен, как это сделать.

Ответы [ 8 ]

14 голосов
/ 28 сентября 2012

Как говорит Том Гуллен.Вы можете просто создать растровое изображение и испортить строку.У меня есть этот код, который я использую, чтобы найти ширину / длину в пикселях.Просто измените шрифт и размер.

// 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;
}

Просто хотел показать пример.

3 голосов
/ 05 апреля 2011

Если вы используете JQuery, посмотрите этот ответ

Определить длину строки в пикселях в Javascript / jQuery?

Я уверен, что если вы не можете работать что-то подобное.

3 голосов
/ 05 апреля 2011

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

Физический размер строки на сервере

Я не уверен, почему так много людей очевидно, он решил выдвинуть идею о том, что это «невозможно» на стороне сервера, это не так. Вам просто нужно быть немного креативным и быть готовым много тестировать.

Я не знаю ни одной встроенной функции для измерения размеров строки в пикселях. Вы можете достичь этого следующими способами. Обратите внимание, что вам нужно знать:

  • Семейство шрифтов
  • Размер шрифта
  • Размеры контейнера (для случаев, когда текст переносит строки)
  • Любые другие правила CSS, такие как интервал между словами, сделают вычисление намного менее точным и более сложным. Старайтесь избегать этого, если важна точность.

1. Визуализируйте его в изображение и измерьте размер изображения

Нарисуйте текст в растровое изображение, а затем измерьте его. Это должно быть достаточно точно.

2. Используйте шрифт фиксированной ширины

Если вы используете шрифт фиксированной ширины, а текст не переносится, вы можете просто умножить его ширину на количество символов.

3. Грубая оценка

Вы можете получить довольно приблизительную оценку шрифтов с нефиксированной шириной, выбрав произвольное число символов ширины и умножив его на общее количество символов. Зависит от того, насколько точным ты хочешь быть.

0 голосов
/ 08 апреля 2018

@ Раствор Эйстейн Бай, сделанный чуть чище с использованием:

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;
     }
}
0 голосов
/ 11 августа 2017

Следующий метод предоставит размер строки, отображаемой заданным шрифтом:

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;
0 голосов
/ 05 апреля 2011

@ Том Гуллен, @ asawyer

Это мое временное решение, и пока оно работает. Кстати, мой проект оказался приложением 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
0 голосов
/ 05 апреля 2011

Это совершенно невозможно сделать на стороне сервера (если под «ASP.NET» вы подразумеваете веб-страницы, созданные с использованием ASP.NET »). ASP.NET выводит HTML , который является языком разметки, интерпретируемым и отображаемым браузером на клиенте . Один и тот же HTML-код может отображаться на разных устройствах, в разных браузерах, с использованием различных установленных шрифтов и т. Д., Что приводит к сильно различающимся отображениям.

Ваш сайт ASP.NET, на котором выполняется код на сервере, не знает, какой шрифт, какое разрешение и т. Д. Использует ваш клиент. Единственный теоретический способ сделать это - запустить клиентский код (например, JavaScript, Silverlight, Flash и т. Д.) Для отправки отчета на сервер. Однако это будет довольно сложно.

Как правило, вам не нужно этого делать, вы не хотите этого делать.

0 голосов
/ 05 апреля 2011

Вы можете использовать свойство Length для строки следующим образом:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...