Длина TextBox

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

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

Ефрейтор
Обычный пользователь
Обычный пользователь
 
Сообщения: 65
Зарегистрирован: 11.02.2005 (Пт) 12:43
Откуда: Алтай

Длина TextBox

Сообщение Ефрейтор » 16.02.2012 (Чт) 10:51

Привет.
Простой пример. На форме имеется один текстбокс. Нужно чтобы размер тектбокса был равен длине вводимого текста.
Объект Graphics вычисляет его с ошибкой. Причем чем длиннее текст тем больше ошибка, текстбокс становится длиннее.
На пятидясяти символах становится заметно.
И первый символ текста рамка текстбокса съедает, его почти не видно.
Если же сделать текст жирный, то с увеличением количества символов в текстбоксе , текст наоборот перестает в нем помещаться.
Может что я не так сделал?

Код: Выделить всё
Private Sub TextBox1_TextChanged(sender As Object, e As System.EventArgs) Handles TextBox1.TextChanged
        Using tempGraphics As Graphics = Me.TextBox1.CreateGraphics()
            Me.TextBox1.Width = CInt(tempGraphics.MeasureString(Me.TextBox1.Text, Me.TextBox1.Font).Width)
        End Using
    End Sub


Admiralisimys
Постоялец
Постоялец
 
Сообщения: 315
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: Длина TextBox

Сообщение Admiralisimys » 16.02.2012 (Чт) 12:47

Ефрейтор может в этом событии достаточно будет установить Me.TextBox1.AutoSize = True ?
Или просто установить контролу TextBox1.AutoSize = True ?

Ефрейтор
Обычный пользователь
Обычный пользователь
 
Сообщения: 65
Зарегистрирован: 11.02.2005 (Пт) 12:43
Откуда: Алтай

Re: Длина TextBox

Сообщение Ефрейтор » 16.02.2012 (Чт) 13:40

Autosize это для автоподбора высоты по шрифту.
В msdn я нашел еще один инструмент MeasureCharacterRanges
но что то никак не могу разобраться как её применить
у меня текстбокс почему то наоборот сжимается :(
Код: Выделить всё
  Private Sub TextBox1_TextChanged(sender As Object, e As System.EventArgs) Handles TextBox1.TextChanged
        Using G As Graphics = Me.TextBox1.CreateGraphics()
            G.PageUnit = GraphicsUnit.Pixel
            ' Me.TextBox1.Width = CInt(tempGraphics.MeasureString(Me.TextBox1.Text, Me.TextBox1.Font).Width)

            Dim sFormat As New StringFormat()
            Dim cr() As CharacterRange = {New CharacterRange(0, Me.TextBox1.TextLength)}
            sFormat.SetMeasurableCharacterRanges(cr)
            Dim r() As Region = G.MeasureCharacterRanges(Text, Me.TextBox1.Font, New RectangleF(0, 0, TextBox1.Width, TextBox1.Height), sFormat)
            Me.TextBox1.Width = CInt(r(0).GetBounds(G).Width)

        End Using
    End Sub

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 315
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: Длина TextBox

Сообщение Admiralisimys » 16.02.2012 (Чт) 14:51

Ефрейтор если в MeasureString вместо Me.TextBox1.Text подсовывать что-то типа "12345" & Me.TextBox1.Text то до определённой длины вводимого текста "ошибка" расчёта длины не будет так заметна.
Ну, а для совсем длинных строк, правильнее уже использовать мультистрочный (TextBox1.Multiline = True) подход, тогда и полосам прокрутки работу можно найти 8)


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

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

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

    TopList