2014-02-19 2 views
2

В одном из моих приложений мне нужно разместить текст внутри текстового поля, а ширина и высота текстового поля должны изменяться в зависимости от длины текста. Поэтому я используюУстановите текст внутри TextBox в формах окон VB.net

TextSize = gr.MeasureString(textcontent, TextFont) 

где TextContent является содержанием текста и TextFont является типом шрифта. (См this link)

Но если текст содержит большое количество символов говорит, что потребуется около 2 линии внутри формы (если текст не поместится в одну строку), то мне также нужно установить высоту. Поэтому я хочу, чтобы текст был правильно помещен внутри текстового поля для любого текста. Также, если есть случай с несколькими строками (для большого текста), то не должно быть дополнительного места в конце первой строки и между второй строкой. Так как это можно сделать?

ответ

2

Это будет сложнее, если вы используете обычный элемент управления TextBox, поскольку свойства ограничены. Поэтому я взял на себя смелость предложить, чтобы использовать элемент управления RichTextBox вместо поскольку она по-прежнему TextBox, но с более широкими возможностями ... Так что попробуйте поставить контроль RichTextBox на форму и добавить этот код ...

Private Sub RichTextBox1_ContentsResized(sender As Object, e As System.Windows.Forms.ContentsResizedEventArgs) Handles RichTextBox1.ContentsResized 
    RichTextBox1.Height = e.NewRectangle.Height + 12 
End Sub 
1

Сделайте что-нибудь подобное ...

  1. Определите максимальную ширину (Mx) текстового поля в соответствии с размером формы или по желанию.
  2. Вычислить длину L, необходимое для строки, как вы делаете .. TextSize = gr.MeasureString(textcontent, TextFont)
  3. Если L меньше или равно Mx затем изменить ширину текстового поля, чтобы L.
  4. Если L больше, чем Mx то фактор Высота (Hf) = L/Mx. Установите txtBox1.Multiline = true и измените txtBox1 height на txtBox1.Height * Hf и установите txtBox1 width = Mx