Обнаружить ширину текста в vb.net

Есть ли способ определить фактическую ширину текста в веб-приложении vb.net? Он должен зависеть от его стиля и размера шрифта.

В vb6 вы можете скопировать текст в метку и сделать ее расширяемой, чтобы она соответствовала ее размеру, но это не будет работать в vb.net.

Ответ 1

Обновление. При дальнейшем проверке лучше выбрать TextRenderer.MeasureText:

    Dim text1 As String = "Measure this text"
    Dim arialBold As New Font("Arial", 12.0F)
    Dim textSize As Size = TextRenderer.MeasureText(text1, arialBold)

См. Graphics.MeasureString:

Измеряет указанную строку, когда нарисованный с помощью указанного шрифта.

    Dim myFontBold As New Font("Microsoft Sans Serif", 10, FontStyle.Bold)
    Dim StringSize As New SizeF

    StringSize = e.Graphics.MeasureString("How wide is this string?", myFontBold)

Ответ 2

Я написал эту младшую функцию, чтобы сделать это без высокоуровневых API.

Он создает растровое изображение и графический объект, записывает строку в растровое изображение, сканирует назад для края шрифта, а затем возвращает ширину в пикселях.

   Private Function FontLengthInPixels(inputString As String, FontStyle As Font) As Integer

    ' Pick a large, arbitrary number for the width (500) in my case
    Dim bmap As New Bitmap(500, 100)
    Dim g As Graphics = Graphics.FromImage(bmap)
    g.FillRectangle(Brushes.Black, bmap.GetBounds(GraphicsUnit.Pixel))
    g.DrawString(inputString, FontStyle, Brushes.White, New Point(0, 0))


    ' Scan backwards to forwards, since we know the first pixel location is 0,0; we need to find the LAST and subtract
    ' the bitmap width from it to find the width.
    For x = -(bmap.Width - 1) To -1

        ' Scan from the 5th pixel to the 10th, we'll find something within that range!
        For y = 5 To 10

            Dim col As Color = bmap.GetPixel(Math.Abs(x), y)

            ' Look for white (ignore alpha)
            If col.R = 255 And col.G = 255 And col.B = 255 Then
                Return Math.Abs(x) ' We got it!
            End If
        Next
    Next

    ' Lets do this approx
    Return 0
End Function

Ответ 3

Я только недавно сделал это в одном из моих проектов, вот как я это сделал

Dim textsize As Size = TextRenderer.MeasureText(cbx_Email.Text, cbx_Email.Font)
        cbx_Email.Width = textsize.Width + 17

это в выпадающем списке. Выбранный индекс изменил саб.

+17 для пикселей, которые выпадающая стрелка поднимает в выпадающем списке, чтобы не раскрыть текст.

с помощью control.font он позволяет коду динамически изменяться независимо от того, какой шрифт используется. Использование Control.Text означает, что вы можете использовать это на чем угодно, и вам не придется менять код при изменении текста элемента управления или страницы.