- Код: Выделить всё
Private Function MeasureDisplayString(graphics As Graphics, text As String, font As Font) As Double
Dim format As New System.Drawing.StringFormat()
Dim rect As New System.Drawing.RectangleF(0, 0, 1000, 1000)
Dim ranges As System.Drawing.CharacterRange() = {New System.Drawing.CharacterRange(0, text.Length)}
Dim regions As System.Drawing.Region() = New System.Drawing.Region(0) {}
format.SetMeasurableCharacterRanges(ranges)
regions = graphics.MeasureCharacterRanges(text, font, rect, format)
rect = regions(0).GetBounds(graphics)
Return Math.Truncate(rect.Right + 1.0)
End Function
Private Sub TextBoxPath_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBoxPath.TextChanged
'Выравниваем текст в адресной строке вправо, если он не вмещается целиком
Dim g As Graphics = System.Drawing.Graphics.FromHwnd(Me.Handle)
Dim MyFont As Font = New Font(TextBoxPath.Font.Name, TextBoxPath.Font.Size, TextBoxPath.Font.Style)
If TextBoxPath.Size.Width < MeasureDisplayString(g, TextBoxPath.Text, MyFont) Then
TextBoxPath.TextAlign = HorizontalAlignment.Right
Else
TextBoxPath.TextAlign = HorizontalAlignment.Left
End If
End Sub
Задача выравнивать текст в TextBox влево, если текст целиком виден в TextBox, иначе вправо. Примерно как в адресной строке проводника. Код работает и изменяет значение TextBoxPath.TextAlign, но сам текст остаётся выровненным влево.
Почему так происходит? Пробовал TextBoxPath.Refresh() не помогает.