我的自定义RichTextBox控件遇到了一些问题。
RichTextBox似乎没有任何“Lines”集合的概念。但我需要逐行管理文本。
有没有办法在RichTextBox中获取和更新一行文本?
我想要的确切方案是查看RichTextBox中的每一行,如果该行有超过60个字符,请在第60个字符后插入Environment.NewLine
。 < / p>
更新: 我发现你可以使用这段代码获得一行:
richTextBox.Document.ContentStart.GetLineStartPosition(lineNumber);
但我仍然无法更新一行。
答案 0 :(得分:1)
你只需要遍历线条,检查长度,如果长度超过60,则添加一个新的线条字符。对该行中的所有字符重复,然后返回结果。
以下是代码大纲
private void richTextBox1_KeyUp(object sender, KeyEventArgs e)
{
TextPointer line = richTextBox1.CaretPosition.GetLineStartPosition(0);
if (line.GetOffsetToPosition(richTextBox1.CaretPosition) > 60)
{
line.GetPositionAtOffset(60, LogicalDirection.Forward).InsertLineBreak();
}
}
如果您运行格式化一次,上面的代码很有用。
答案 1 :(得分:0)
如果当前行太长,此代码会添加一个新行。 (这仅适用于当前行,因此需要适应更多行进行粘贴。)
private const int lineLimit = 60;
private static void BlockCurrentToNotExceedMaxChars(TextPointer currentLocation)
{
var currentStart = currentLocation.GetLineStartPosition(0);
var nextStart = currentLocation.GetLineStartPosition(1);
var currentEnd = (nextStart != null ? nextStart : currentLocation.DocumentEnd).GetInsertionPosition(LogicalDirection.Backward);
TextRange currentLine = new TextRange(currentStart, currentEnd);
if (currentLine.Text.Trim().Length > lineLimit)
{
currentStart.GetPositionAtOffset(lineLimit + 1).InsertLineBreak();
}
}