Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在RichTextBox中设置行的最大长度?_C#_.net_Wpf_Richtextbox - Fatal编程技术网

C# 如何在RichTextBox中设置行的最大长度?

C# 如何在RichTextBox中设置行的最大长度?,c#,.net,wpf,richtextbox,C#,.net,Wpf,Richtextbox,我想知道是否有任何方法可以设置RichTextBox中一行的最大字符数。我知道我可以为整个框设置一般的最大长度,但不能为行本身设置 我在想,唯一的解决方案,或者至少是可行的解决方案,是在TextRange中选择行,计算字符数,并检查它是否大于我手动设置的最大值。然后,使用以下内容创建新行: myRichTextBox.AppendText(Environment.NewLine); 并将插入符号位置设置到选择的末尾,类似于: myRichTextBox.CaretPosition = myRi

我想知道是否有任何方法可以设置RichTextBox中一行的最大字符数。我知道我可以为整个框设置一般的最大长度,但不能为行本身设置

我在想,唯一的解决方案,或者至少是可行的解决方案,是在TextRange中选择行,计算字符数,并检查它是否大于我手动设置的最大值。然后,使用以下内容创建新行:

myRichTextBox.AppendText(Environment.NewLine);
并将插入符号位置设置到选择的末尾,类似于:

myRichTextBox.CaretPosition = myRichTextBox.Selection.End;

这是解决我的问题的最佳方法,还是有更简单的方法呢?

您可以在触发时设置一个按键事件,验证键和所需的长度,并在需要时附加Environment.NewLine。

我认为这是一个棘手的问题,他的代码可以很好地实现这一点:

private void myRichTextBox_TextChanged(object sender, EventArgs e)
{
    int maxLen = 10;
    int CursorIndex = myRichTextBox.SelectionStart;



    var text = myRichTextBox.Text;

    int startIndex = text.Substring(0, CursorIndex).LastIndexOf("\n") + 1;
    int endIndex = text.IndexOf("\n", CursorIndex, text.Length - CursorIndex);

    // if (startIndex < 0) startIndex = 0;
    if (endIndex < 0) endIndex = text.Length;


    string line = text.Substring(startIndex, endIndex - startIndex).Trim();

    if (line.Length > maxLen)
    {
        int insertionPoint = startIndex + maxLen;
        text = text.Insert(insertionPoint, "\n");
        CursorIndex += (insertionPoint < CursorIndex) ? 1 : 0;
        myRichTextBox.Text = text;
        myRichTextBox.SelectionStart = CursorIndex;
    }

}
然而,我认为应该有更好的方法来做到这一点