Как изменить выравнивание текста в TextBoxe

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

773FF
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 07.02.2008 (Чт) 10:51

Как изменить выравнивание текста в TextBoxe

Сообщение 773FF » 11.09.2011 (Вс) 19:56

Собственно есть код:
Код: Выделить всё
    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() не помогает.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 11.09.2011 (Вс) 22:03

Судя по написанному, речь идёт о программном изменении текста (т. к. при ручном отображается та часть, которая нунжа). Поэтому, думаю, что будет проще сделать так:
Код: Выделить всё
Public Sub SetText(ByVal Txt As TextBox, ByVal Text As String)
  With Txt
    .Text = Text
    .Select(.Text.Length, 0)
  End With
End Sub

773FF писал(а):TextAlign, но сам текст остаётся выровненным влево.

А как вы определяете выравнивание, когда поле полностью заполнено? Всегда отображается та часть, в которой стоит курсор. По-другому нельзя, скорее всего. По крайней мере без ручной отрисовки.

773FF
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 07.02.2008 (Чт) 10:51

Re: Как изменить выравнивание текста в TextBoxe

Сообщение 773FF » 12.09.2011 (Пн) 17:21

Код: Выделить всё
Public Sub SetText(ByVal Txt As TextBox, ByVal Text As String)
  With Txt
    .Text = Text
    .Select(.Text.Length, 0)
  End With
End Sub


Спасибо большое! Я так и сделаю.

773FF
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 07.02.2008 (Чт) 10:51

Re: Как изменить выравнивание текста в TextBoxe

Сообщение 773FF » 12.09.2011 (Пн) 17:48

Заработало, спасибо.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 28

    TopList