Я пытаюсь использовать RichTextBoxes только для чтения, чтобы показать сгенерированный пользователем текст. Высота текстового поля и элемента управления должна зависеть от содержимого и быть ограничена определенным максимумом; все, что находится за этой точкой, использует полосы прокрутки.
Авторазмер не работает для RTB
public void Rescale()
{
Point pt = rtbComment.GetPositionFromCharIndex(rtbComment.Text.Length);
int height = rtbComment.GetPositionFromCharIndex(rtbComment.Text.Length).Y + (int)rtbComment.SelectionFont.GetHeight();
if (height > 250)
height = 250;
this.Size = new System.Drawing.Size(616, height + 50);
rtbComment.Size = new System.Drawing.Size(614, height);
}
Это прекрасно работает для коротких комментариев или комментариев с небольшим количеством текста и множеством разрывов строк, но для длинных однострочных строк, разбитых на ~ 4 строки, точка, которую я получаю из GetPositionFromCharIndex, совершенно неверна - функция помещает ее где-то на 105 пикселей внизось у, когда она на самом деле ближе к 60, что делает текстовое поле примерно вдвое большим, чем должно быть.
Ширина здесь не является проблемой, так как поле начинается с ширины, которой я являюсьустановка его в значение и повторное чтение точки дает тот же результат.