根据定义的范围正确选择文本。
右侧有 5 个字符错位。
rtfcontrol.Appen(initialtext, true);
rtfcontrol.Append(sometext, true);
rtfcontrol.Selection = new Range<int>(rtfcontrol.Text.Length - sometext.Length, rtfcontrol.Text.Length -1);
rtfcontrol.SelectionForeground = Colors.Blue;
rtfcontrol.Append("\n", true);
rtfcontrol.Selection = new Range<int>(rtfcontrol.Text.Length);
WPF:
GTK2 (Linux):
Xamarin.Mac:
在 Windows 上,行结束字符以某种方式不计入选择索引。 我目前使用以下代码作为解决方法:
private void Write(string message, Color c)
{
Append(message + Environment.NewLine, true);
int idx = -1, last = -1;
if (Environment.OSVersion.Platform == PlatformID.Unix)
{
idx = Text.LastIndexOf(message);
last = Text.Length;
}
else
{
var lines = string.Join("", Text.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries));
idx = lines.LastIndexOf(message);
last = lines.Length;
}
if (idx == -1)
return;
Selection = new Range<int>(idx, idx + message.Length);
SelectionForeground = c;
Selection = new Range<int>(last, last);
}
但这绝对是一个错误......
是的,我之前使用过与@ManuelHu相同的 hack,它并不漂亮。 我还不确定如何有效地解决这个问题,而不会因为大文本而变得缓慢。
感谢您报告问题!
嘿@DanWBR ,
这应该在最新的开发分支中修复。 你可以试一试吗? 在所有平台上,换行符现在都被视为单个\n
字符。
嗨@cwensley ,还有一个字符需要修复:
嘿@DanWBR ,你有一个问题的
也许我使用了错误的索引? 不过,它确实适用于 macOS 和 GTK。
@DanWBR ,是的,不幸的是,它不会像您拥有的那样工作Text
属性的末尾添加了一个换行符(无论您的文本是否包含它)。 在这一点上,我还没有找到解决方法,但这是一个与这个问题不同的问题。
我的建议是将当前位置保留在变量中,并在附加文本后增加它。 每次访问Text
属性只是为了获取长度会随着文本变大而变慢。
最有用的评论
@DanWBR ,是的,不幸的是,它不会像您拥有的那样工作
Text
属性的末尾添加了一个换行符(无论您的文本是否包含它)。 在这一点上,我还没有找到解决方法,但这是一个与这个问题不同的问题。我的建议是将当前位置保留在变量中,并在附加文本后增加它。 每次访问
Text
属性只是为了获取长度会随着文本变大而变慢。