定義された範囲に従って正しく選択されたテキスト。
右側に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と同じハックを使用しました、それはきれいではありません。 大きなテキストで犬を遅くすることなく、これに効果的に対処する方法はまだわかりません。
問題を報告していただきありがとうございます。
ねえ@DanWBR 、
これは、最新の開発ブランチで修正する必要があります。 やってみませんか? すべてのプラットフォームで、改行は単一の\n
文字として扱われるようになりました。
こんにちは@cwensley 、まだ修正する文字が1つ残っています:
ねえ@DanWBR 、あなたは1つの問題によるオフの
たぶん私は間違ったインデックスを使用していますか? ただし、macOSとGTKでは機能します。
@DanWBR 、ああ、残念ながらそれはあなたが持っているようには機能しませんText
プロパティの最後に改行を追加します(テキストに改行があるかどうかは関係ありません)。 現時点ではそれを回避する方法は見つかりませんが、これとは別の問題です。
私がお勧めするのは、現在の位置を変数に保持し、テキストを追加した後にそれをインクリメントすることです。 長さを取得するためだけに毎回Text
プロパティにアクセスすると、テキストが大きくなるにつれて速度が低下します。
最も参考になるコメント
@DanWBR 、ああ、残念ながらそれはあなたが持っているようには機能しません
Text
プロパティの最後に改行を追加します(テキストに改行があるかどうかは関係ありません)。 現時点ではそれを回避する方法は見つかりませんが、これとは別の問題です。私がお勧めするのは、現在の位置を変数に保持し、テキストを追加した後にそれをインクリメントすることです。 長さを取得するためだけに毎回
Text
プロパティにアクセスすると、テキストが大きくなるにつれて速度が低下します。