Кто-то может объяснить, как я пошел бы об измерении строки в управлении richtextbox так, чтобы я мог автоматически изменить размеры управления richtextbox согласно своему содержанию?
Спасибо
Править:
Я думал об этом, и так как ниже ответа не будет работать, если будут различные шрифты в Контроле RichTextBox, что, если, я мог бы добраться, верхние левые провода richtextbox управляют и затем получают нижние правые провода самой последней строки текста в rtb. Это по существу дало бы мне Ширину и Высоту строки в Управлении RichTextBox. Действительно ли это возможно? Или действительно ли это - плохая идея сделать это этот путь?
Try calling GetPreferredSize(Size.Empty). Он определен в классе Control и, если переопределить свойство RichTextBoxControl, должен дать вам то, что вы ищете.
Если вы передадите в метод что-то, отличное от Size.Empty, то он будет использовать это значение в качестве максимального ограничения. Использование Size.Empty означает, что потенциальный размер не ограничен.
Предполагая, что кто-то набирает текст в контроле, вы можете использовать событие для запуска каждый раз, когда вводится символ (увеличивая счетчик) и уменьшая, когда он удаляется. Это даст вам истинный счетчик.
Edit:
Пробовали ли вы настроить высоту таким образом?
richTextBox1.Height = (int)(1.5 * richTextBox1.Font.Height) + richTextBox1.GetLineFromCharIndex(richTextBox1.Text.Length + 1) * richTextBox1.Font.Height + 1 + richTextBox1.Margin.Vertical;
richTextBox1.SelectionStart = 0;
richTextBox1.SelectionStart = richTextBox1.Text.Length;
Или вы можете сделать это с помощью Width:
Graphics g = Graphics.FromHwnd(richTextBox1.Handle);
SizeF f = g.MeasureString(richTextBox1.Text, richTextBox1.Font);
richTextBox1.Width = (int)(f.Width)+5;
Вы можете измерить строку, вызвав TextRenderer.MeasureText
.
Однако, если текст содержит несколько шрифтов, это не сработает.
EDIT: Вы ищете GetPositionFromCharIndex
метод.
Обратите внимание, что если строк несколько, вы должны взять максимальное значение координат X последнего символа в каждой строке.