2013-04-02 4 views
0

У меня есть winforms RichTextBox и TextBox (для обоих). Когда я набираю текст, я хочу, чтобы ящик увеличивался вертикально (или меньше по вертикали), чтобы весь текст был доступен для просмотра.vb.net textbox/richtextbox GetPreferredSize не работает

Я использую следующий код в случае RichTextBox TextChanged:

RTB.Height = RTB.GetPreferredSize(New Size(RTB.Width, 0)).Height 

Этот код работает в большинстве случаев, кроме одного - когда вы кладете в одно слово (без пробелов), который больше, чем ширина из коробки. Есть идеи?

Спасибо.

ответ

1

Нашел следующий ответ уже на Stackoverflow! Просто нужно было искать лучше ...

Private Sub rtb_ContentsResized(ByVal sender As Object, ByVal e As System.Windows.Forms.ContentsResizedEventArgs) Handles txtQuestion.ContentsResized 
    Dim h = e.NewRectangle.Height, w = e.NewRectangle.Width 
    h = Math.Max(h, sender.Font.Height) 
    h = Math.Min(h, Me.ClientSize.Height - 10 - sender.Top) 
    h += sender.Height - sender.ClientSize.Height + 1 
    sender.Height = h 
End Sub 

из

Measure String inside RichTextBox Control

0

Попробуйте экспериментировать с минимальными и максимальными размерами RTB.

Похоже, что установка максимальной ширины может привести к возникновению проблемы.

+0

Unfortuinately 'RTB.MaximumSize = Новый размер (RTB.Width, 0)' перед установкой высоты не помогает :( – Ian

+0

Установка максимальной ширины будет ограничивать ширину RTB, так что длинное слово приведет к росту RTB по высоте вместо того, чтобы просто расширяться. Установите свойства max/min (и, возможно, WordWrap) во время разработки или, возможно, в форме после события изменения размера для управления размер увеличивается. – rheitzman