Text gemäß definiertem Bereich richtig ausgewählt.
Es gibt eine Fehlplatzierung von 5 Zeichen nach rechts.
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:
Unter Windows werden die Zeilenendezeichen irgendwie nicht zu den Indizes für die Auswahl gezählt. Als Workaround verwende ich derzeit folgenden Code:
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);
}
Aber das ist definitiv ein Bug...
Ja, ich habe den gleichen Hack wie @ManuelHu zuvor verwendet, er ist nicht schön. Ich bin mir noch nicht sicher, wie ich dies effektiv angehen kann, ohne mit großem Text hundelangsam zu sein.
Danke für die Meldung des Problems!
Hey @DanWBR ,
Dies sollte im neuesten Entwicklungszweig behoben werden. Könnten Sie es versuchen? Auf allen Plattformen werden Zeilenumbrüche jetzt als einzelnes \n
Zeichen behandelt.
Hallo @cwensley , es muss noch ein Zeichen repariert werden:
Hey @DanWBR , hast du eine Repro für das Off by One Issue? Ich kann es anscheinend nicht reproduzieren.
Vielleicht verwende ich falsche Indizes? Es funktioniert jedoch unter macOS und GTK.
@DanWBR , ah ja, das wird leider nicht so funktionieren, wie Sie es haben - WPF fügt einen Zeilenumbruch am Ende der Eigenschaft Text
(unabhängig davon, ob Ihr Text dies enthält oder nicht). Ich habe bisher keinen Weg gefunden, das zu umgehen, aber es ist ein anderes Problem als dieses.
Ich würde empfehlen, die aktuelle Position in einer Variablen beizubehalten und sie nach dem Anhängen von Text zu erhöhen. Wenn Sie jedes Mal auf die Eigenschaft Text
zugreifen, nur um die Länge zu erhalten, wird dies langsamer, wenn der Text größer wird.
Hilfreichster Kommentar
@DanWBR , ah ja, das wird leider nicht so funktionieren, wie Sie es haben - WPF fügt einen Zeilenumbruch am Ende der Eigenschaft
Text
(unabhängig davon, ob Ihr Text dies enthält oder nicht). Ich habe bisher keinen Weg gefunden, das zu umgehen, aber es ist ein anderes Problem als dieses.Ich würde empfehlen, die aktuelle Position in einer Variablen beizubehalten und sie nach dem Anhängen von Text zu erhöhen. Wenn Sie jedes Mal auf die Eigenschaft
Text
zugreifen, nur um die Länge zu erhalten, wird dies langsamer, wenn der Text größer wird.