Texto correctamente seleccionado según rango definido.
Hay un extravío de 5 caracteres a la derecha.
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:
En Windows, los caracteres finales de línea de alguna manera no se cuentan en los índices para las selecciones. Actualmente utilizo el siguiente código como solución temporal:
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);
}
Pero esto definitivamente es un error ...
Sí, he usado el mismo truco que @ManuelHu antes, no es bonito. Todavía no estoy seguro de cómo abordar esto de manera efectiva sin ser un perro lento con texto grande.
Gracias por informar del problema.
Hola @DanWBR ,
Esto debería solucionarse en la última rama de desarrollo. ¿Podrías intentarlo? En todas las plataformas, las nuevas líneas ahora se tratan como un solo carácter \n
.
Hola @cwensley , todavía queda un carácter por corregir:
Hola @DanWBR , ¿tienes un repro para el apagado por un número? Parece que no puedo reproducirlo.
¿Quizás estoy usando índices incorrectos? Sin embargo, funciona en macOS y GTK.
@DanWBR , ah, sí, Text
(independientemente de si su texto lo tiene o no). No he encontrado una forma de evitar eso en este momento, pero es un tema separado de este.
Lo que recomendaría es mantener la posición actual en una variable e incrementarla después de agregar texto. El acceso a la propiedad Text
cada vez solo para obtener la longitud se ralentizará a medida que el texto se haga más grande.
Comentario más útil
@DanWBR , ah, sí,
Text
(independientemente de si su texto lo tiene o no). No he encontrado una forma de evitar eso en este momento, pero es un tema separado de este.Lo que recomendaría es mantener la posición actual en una variable e incrementarla después de agregar texto. El acceso a la propiedad
Text
cada vez solo para obtener la longitud se ralentizará a medida que el texto se haga más grande.