【发布时间】:2011-10-24 14:33:06
【问题描述】:
我有一个 C#/WinForms 富文本框,我需要能够将输入的文本限制为明显适合可视区域的内容。我知道我可以通过字符数来限制它,但是当我们考虑自动换行、非等宽字体的不同字符宽度等问题时,这并不能达到预期的效果。
我可以在文本更改时触发事件回调,但我需要一种方法来知道文本超出了可视区域。有什么建议吗?
【问题讨论】:
我有一个 C#/WinForms 富文本框,我需要能够将输入的文本限制为明显适合可视区域的内容。我知道我可以通过字符数来限制它,但是当我们考虑自动换行、非等宽字体的不同字符宽度等问题时,这并不能达到预期的效果。
我可以在文本更改时触发事件回调,但我需要一种方法来知道文本超出了可视区域。有什么建议吗?
【问题讨论】:
在您的回调中,您可以使用MeasureString 来确定给定字体的字符串的长度。然后将其与文本框宽度进行比较。
【讨论】:
您可以获得适合您的richtextbox可见区域的最后一个字符的偏移量,如下所示:
richTextBox1.TextChanged += (sndr, evnt) =>
{
richTextBox1.Select(0, 0);
int pos = richTextBox1.GetCharIndexFromPosition(new Point(richTextBox1.Width, richTextBox1.Height));
};
【讨论】:
您可以使用Graphics.MeasureString 获取字符串的实际宽度,并在达到您的文本框宽度时停止
Graphics graphics = this.CreateGraphics();
SizeF textSize = graphics.MeasureString(myText.Text, this.Font);
【讨论】:
我遇到了这个问题,因为我目前正在尝试做相反的事情(调整富文本框的大小以适应其中的文本集),但我遇到了您可能能够使用的函数 GetPreferredSize。您希望在每次合法编辑后将当前 RTF 文本保存在框中,然后在下一次编辑调用 GetPreferredSize 时查看框必须有多大才能容纳新文本。如果太大,则恢复为保存的文本...
【讨论】: