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