C#Winforms RichTextBox。如何按rtb的大小限制字符数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#Winforms RichTextBox。如何按rtb的大小限制字符数?相关的知识,希望对你有一定的参考价值。

如何按rtb的大小限制字符数? WPF文本框的相同问题。

我试图通过将rtb的clientSize与Graphics.MeasureStringTextRenderer.MeasureText进行比较来限制它,但是它们在计算中都有一些错误,并且TR.MeasureText不能将一个长字包装为rtb。所以我的长话有点大问题。

在WPF中,我使用FormattedText来获取文本大小,但它也不包含长字。

关于逻辑:在粘贴命令中,我尝试为文本字段制作Adobe Acrobat逻辑:当您在其他文本的中间粘贴长文本时,您只能粘贴那些数量的字符。

抱歉我的语言。

答案

对于WPF 只需使用TextBox的“MaxLength”属性即可。

粘贴文本会将其限制为设置的字符数量,但请记住,还会计算换行符(CR LF - 2个字符)。如果将其粘贴在文本中间 - 粘贴的内容将限制为MaxLength之前剩余的字符数。

由于OP提到这是关于宽度而不是长度,这是要考虑的路径 - 基于WPF的包装机制使用具有设置TextBoxMaxWidth修剪文本。

    private void this_TextChanged(object sender, TextChangedEventArgs e)
    {
        if (sender is TextBox)
        {
            var textb = sender as TextBox;
            if (textb.LineCount > 1)
            {
                foreach (var change in e.Changes.Where(x=>x.RemovedLength == 0))
                {
                    for (int index = change.AddedLength; index > 0; index--)
                    {
                        textb.Text = textb.Text.Remove(change.Offset, 1);
                        textb.UpdateLayout();
                        if (textb.LineCount == 1)
                            break;
                    }
                    if (textb.LineCount == 1)
                        break;
                }
            }
        }
    }

和.xaml这样的TextBox

    <TextBox TextChanged="this_TextChanged" MaxWidth="200" Text="{Binding TextValue}" TextWrapping="Wrap"/>

这只是一个粗略的例子 - 修剪粘贴的文本工作正常,但是如果您选择已存在的文本的一部分并尝试通过粘贴文本来替换它则不起作用 - 问题来自更新TextChanged中的文本,这会触发它再一次 - 以这种方式粘贴而没有:

   e.Changes.Where(x=>x.RemovedLength == 0)

导致TextBox前面的文本被修剪 - 可能是可修复的。

以上是关于C#Winforms RichTextBox。如何按rtb的大小限制字符数?的主要内容,如果未能解决你的问题,请参考以下文章

RichTextBox C# 设置插入符号位置 winforms

C# 在 RichTextBox 中右键单击移动光标

如何在不选择 RichTextBox 的情况下恢复插入符号位置或更改文本颜色

Richtexbox 如何在 Winforms 上附加来自事件侦听器的异步文本?

Winforms文本框 - 使用Ctrl-Backspace删除整个单词

如何更改RichTextBox高度以适应C#中的新字体大小